On Fri, Nov 5, 2010 at 2:12 PM, AdamM <adammaga...@gmail.com> wrote:

> Thank you Daniel is was not aware of this feature in PB I will give it
> a try.
>

There is a slight gain for smaller numbers, but it's small enough that it's
not worth the maintenance headache of trying to choose unique small numbers.
 Basically, tags with numbers less than 16 use 1 byte.  16 to 2048 use two
bytes, 2048 to 262144 use 3 bytes, 262144 to 33554432 use 4 bytes etc (you
get 7 bits per byte, except for the first byte which only gets 4 bits.
http://code.google.com/apis/protocolbuffers/docs/encoding.html has the
details).

Note that the actual "extensions 100 to 1000000000;" line in the .proto file
costs nothing -- the gain I'm talking about above is when you encode a
message with a given field number.

One question though is there any optimization gain you get from using
> "extensions 100 to 200;" over "extensions 100 to 1000000000;"?
>
> On Nov 5, 3:21 pm, Daniel Wright <dwri...@google.com> wrote:
> > This is exactly what extensions are for -- seehttp://
> code.google.com/apis/protocolbuffers/docs/proto.html#extensions
> >
> > It would look something like:
> >
> > message BaseMessage {
> >   required MsgType type = 1;
> >   extensions 100 to 1000000000;
> >
> > }
> >
> > Then each module would have a message like:
> >
> > message Msg1 {
> >   extend BaseMessage {
> >     optional Msg1 msg1 = <some_unique_id>
> >   }
> >   required int32 field = 1;
> >
> > }
> >
> > Then the main program can pass the entire BaseMessage to the right module
> > based on type, and the module can retrieve the parsed extension.
> >
> >
> >
> >
> >
> >
> >
> > On Fri, Nov 5, 2010 at 10:31 AM, AdamM <adammaga...@gmail.com> wrote:
> > > Hello PB Group,
> >
> > > I am programming a group of programs in C++ that use PB to
> > > communicate. In my first version of the program I was using a .proto
> > > file that looked similar to the example 1 below. I would then run a
> > > switch statement on a MsgType and create the proper message.
> >
> > > I am now starting to write my second version of the program to include
> > > a plugin module architecture. My program calls for a core program and
> > > then multiple modules that are written against a base module. Well in
> > > my core program I get packets over the network and then parse them
> > > info a PB Message.
> >
> > > I would like a way to have some sort of Base Message that the my core
> > > program would use to parse with the  base message would contain a
> > > packet packet operation code and the data for the actual message
> > > structure. I want to program it so the Core program has no idea what
> > > the actual message structure is. It would pass it to the respective
> > > module based on the operation code who would then  parse the actual
> > > message structure because it knows what that structure should be.
> >
> > > Does anyone have any suggestions how to do this? Any help would be
> > > much appreciated.
> >
> > > Example 1.
> >
> > > enum MsgType {
> > >   MSG1,
> > >   MSG2,
> > >   MSG3
> > > }
> >
> > > Message Msg1 {
> > >   required int32 field = 1 ;
> > > }
> >
> > > Message Msg2 {
> > >   required int32 field = 1 ;
> > > }
> >
> > > Message Msg3 {
> > >   required int32 field = 1 ;
> > > }
> >
> > > Message BaseMessage {
> > >   required MsgType type = 1 ;
> > >   optional Msg1 = 2 ;
> > >   optional Msg2 = 3 ;
> > >   optional Msg3 = 4 ;
> > > }
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Protocol Buffers" group.
> > > To post to this group, send email to proto...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> <protobuf%2bunsubscr...@googlegroups.c om>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/protobuf?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to