Hi All,

Quick question (though it may be a little confusing).

I currently have a Message that looks something like this

message MyMessage {

  repeated float positions = 1 [packed = true];

  repeated float normals = 2 [packed = true];

  // other repeated float fields 

}

This message has been written to a various files. Unfortunately, if I want 
to follow the guidelines outlined in the technique section of the 
documentation, I need to change the structure of the file to fit under the 
1 MB per message guideline. The reason being that the message may go over 
1MB depending on how many positions, normals, etc. are in the message and 
sometimes it can be very large.

My solution to the problem is to turn the files from "one message per file" 
to a "size delimited series of messages." The new message would be 
something like:

message MyNewMessage

{

  optional float position = 1;

  optional float normal = 2;

  ///other fields

}

The file would then contain something like:

[varint of the size of the first MyNewMessage]

[MyNewMessage #1]

[varint of the size of the second MyNewMessage]

[MyNewMessage #2]

......

Conceptually, so far so good. The problems comes when I want to be 
backwards compatible (have my code be able to take either "version" of the 
file as input). How can I do a test to see if my file has just a message in 
it or starts with the varint? Something akin to the pseudo code below 
(using C++):

void DeserializeMyDataFromCodedInput(CodedInputStream* inputStream){

  if ( able_to_parse_MyMessage_from_stream() ) {

    // Do code that parses from MyMessage

  } else {

    // Do code that parses from the size delimited collection of messages

 }

}

It's easy enough to test for parsing failure when trying to parse a 
MyMessage from the coded input stream (which really wraps an ifstream 
underneath), but how do I put the coded input stream back at the "proper" 
position. The docs and code comments aren't that clear (to me at least) as 
to what BackUpInputToCurrentPosition()so I'm unsure if that is the right 
thing to use.

I would prefer not to change file extensions or encode such information in 
the filenames if at all possible.

Thanks for all of the help!


-Jonathan

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to