Re: list member containing sub classes

2009-08-05 Thread Kenton Varda
Why do your protocol message types have to map 1:1 with your legacy classes?
 Generally, attempting to map inheritance onto Protocol Buffers doesn't work
very well.
You are right that you can use extensions, but unless you have a large
number of subclasses of OParameter, this isn't helpful.  If the only
subclasses of OParameter are OStringParameter, OLongParameter, and
OListParameter, then I highly recommend defining OParameter as:

  message OParameter {
// Only one of the following will be filled in.
optional int64 long_value = 1;
optional string string_value = 2;
repeated OParameter list_value = 3;
  }

If you really wanted to use extensions instead, you could do:

  message OParameter {
// Only one extension will be filled in.
extensions 1 to max;
  }

  extend OParameter {
optional int64 oparameter_long_value = 1;
optional string oparameter_string_value = 2;
repeated OParameter oparameter_list_value = 3;
  }

This is logically equivalent to the first definition.  The only difference
is logistical:  you can define each extension field in a different .proto
file, and your program only needs to compile in the definitions of
extensions that it actually uses.  So you can do:

  // oparameter.proto
  message OParameter {
// Only one extension will be filled in.
extensions 1 to max;
  }

  // olongparameter.proto
  import oparameter.proto;
  extend OParameter {
optional int64 oparameter_long_value = 1;
  }

  // ostringparameter.proto
  import oparameter.proto;
  extend OParameter {
optional string oparameter_string_value = 2;
  }

  // olistparameter.proto
  import oparameter.proto;
  extend OParameter {
repeated OParameter oparameter_list_value = 3;
  }

But again, if you only have these three subclasses, then this is overkill.
 If you actually have a lot more (say, at least 10), then it might be
worthwhile.

Again, keep in mind that extensions are not inheritance -- they are a very
different concept which happens to be able to solve similar problems.

On Wed, Aug 5, 2009 at 1:31 AM, Tai maitai.tru...@gmail.com wrote:


 Hi Kenton,

 Sorry the parameter classes are legacy code and persisted to the DB as
 well. So I have to figure out what's the best approach defining my
 proto classes.

 What I see is that there is the way of using extensions in the proto
 files. As far as I understand it is an extension of members (an not
 classes) in another proto file. Correct?

 So in my case the files in OStringParameterMessage.proto and
 OLongParameterMessage.proto extends OParameterMessage.proto with a
 member value of type string and int64.

 The OListParameterMessage.proto then extends it with a member value of
 type List (containing OParameterMessage.OParameter instances).

 In the OListParameter.writeObject() I build OParameter messages. But
 wouldn't there be a problem since the value is either of type String
 or Quantity (depending on the subclass of OParameter)? Probably I have
 to define different member names.

 Tai


 On 5 Aug., 03:05, Kenton Varda ken...@google.com wrote:
  Can you just have the OParameter message contain optional fields of type
  string and int64, where only one of the two is ever set?  Then don't have
  specific types corresponding to OStringParameter and OLongParameter.
 
  On Tue, Aug 4, 2009 at 5:07 PM, Tai maitai.tru...@gmail.com wrote:
 
   Hi,
 
   I have an (abstract) class:
   - OParameter with a member String key
 
   Now there are also two subclasses of OParameter:
   - OStringParameter with a member String value
   - OLongParameter with a member long value
 
   By using Protocol Buffers I define the proto files:
   - OParameterMessage.proto
   - OStringParameterMessage.proto
   - OLongParameterMessage.proto
 
   The files are independent from each other (no extension is used). As
   far as I understand this is how Protocol Buffers should be used. All
   classes (OParameter, OStringParameter and OLongParameter) then
   implements the writeObject() and readObject() and each class just uses
   their Protocol message and sets their members. Like:
   - Class OStringParameter.writeObject() builds a message and sets only
   its member (value)
   - The superclass OParameter.writeObject() builds a message and sets
   only its member (key)
 
   The same goes for the readObject().
 
   Okay. So far so good. But now I have a class called OListParameter and
   its member (value) is a list of OParameter containing instances of
   both types: OStringParameter and OLongParameter.
 
   How do I describe this in a proto file?
 
   Thanks Tai
 


--~--~-~--~~~---~--~~
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

Re: python custom options

2009-08-05 Thread Kenton Varda
Sorry, they are not implemented, but feel free to submit a patch.
On Wed, Aug 5, 2009 at 6:13 AM, jacobgladish jacob.glad...@sig.com wrote:


 Does anyone know the current state of custom options with python? Are
 they functional?
 


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



Re: Java: class visibility

2009-08-05 Thread Kenton Varda
Currently there's no way to do that.  You could add an option to
descriptor.proto, and update the Java code generator to honor it.  Or you
could just use a postprocessing step like:
  sed -i 's/^public class/class/' MyProto.java

On Wed, Aug 5, 2009 at 6:41 AM, v6ak vit...@gmail.com wrote:


 How can I achieve package-private class visibility? Using of Protocol
 Buffers is just implementation detail only.
 


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



RPM Spec File

2009-08-05 Thread Peter Keen

Hi guys,

I was wondering if anyone out there had built an RPM spec file for
protobuf. I'll be needing to distribute the C++ runtime library to a
set of machines and I'd like to be able to chuck something in a shared
yum repo and be done with it, rather than having to copy around a
tarball or something.

Thanks,
Pete
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---