If you can just write code specific to your message type which deals with
merging items with the same ID, I'd suggest doing that.  If you really need
to write a totally generic algorithm, you can use reflection as documented
here:
http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.message.html#Reflection

On Fri, Aug 14, 2009 at 4:46 PM, George Georgiev <georgi.georg...@citrix.com
> wrote:

>  Hi,
>
> MergeFrom sounds good.
>
> The only issue that I still will have is with the repeated fields. For
> some of them I will have an Id attribute. So what I would like to achieve
> is when I merge the messages instead of adding new partial message in the
> list it to combine those of the repeated messages that have the same Id.
>
> >> custom algorithm based on reflection
> I suppose this is what I need in this case. Could you please give me a bit
> more information what you mean.
>
> Thanks
> -George
>
>  ------------------------------
> *From:* Kenton Varda [mailto:ken...@google.com]
> *Sent:* Friday, August 14, 2009 2:01 PM
> *To:* George Georgiev
> *Cc:* Protocol Buffers
> *Subject:* Re: combine protobuf messages
>
> On Fri, Aug 14, 2009 at 1:18 PM, George Georgiev <
> georgi.georg...@citrix.com> wrote:
>
>>  1. How to serialize parts from the message without validation
>>
>
> Use the "Partial" serialization and parsing methods, e.g.
> SerializePartialToString() and ParsePartialFromString().  These do not check
> required fields.
>
>
>>  2. How to combine two parts. Or how to parse second part which may
>> overlap some of the already existing parts
>>
>
> Use MergeFrom():
>
>   MyMessage combined;
>   // Iterate over messages from lowest to highest priority.
>   for (int priority = 0; priority < max_priority; ++priority) {
>     combined.MergeFrom(messages_by_priority[priority]);
>   }
>
>   // Check
>   if (!combined.IsInitialized()) {
>     cerr << "Missing required fields: "
>          << combined.InitializationErrorString() << endl;
>     return false;
>   }
>
> As documented, the semantics of MergeFrom() are:  "Singular fields will be
> overwritten, except for embedded messages which will be merged. Repeated
> fields will be concatenated."
>
> So, if you merge the highest-priority message last, then its values will
> end up taking precedence.
>
> If MergeFrom() isn't quite what you want, then you'll have to write a
> custom algorithm based on reflection.
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@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