1. 10 Feb, 2009 1 commit
  2. 22 Jan, 2009 1 commit
    • kenton@google.com's avatar
      Push out changes from internal codebase. · 2d6daa72
      kenton@google.com authored
      All Languages
      * Repeated fields of primitive types (types other that string, group, and
        nested messages) may now use the option [packed = true] to get a more
        efficient encoding.  In the new encoding, the entire list is written
        as a single byte blob using the "length-delimited" wire type.  Within
        this blob, the individual values are encoded the same way they would
        be normally except without a tag before each value (thus, they are
        tightly "packed").
      
      C++
      * UnknownFieldSet now supports STL-like iteration.
      * Message interface has method ParseFromBoundedZeroCopyStream() which parses
        a limited number of bytes from an input stream rather than parsing until
        EOF.
      
      Java
      * Fixed bug where Message.mergeFrom(Message) failed to merge extensions.
      * Message interface has new method toBuilder() which is equivalent to
        newBuilderForType().mergeFrom(this).
      * All enums now implement the ProtocolMessageEnum interface.
      * Setting a field to null now throws NullPointerException.
      * Fixed tendency for TextFormat's parsing to overflow the stack when
        parsing large string values.  The underlying problem is with Java's
        regex implementation (which unfortunately uses recursive backtracking
        rather than building an NFA).  Worked around by making use of possesive
        quantifiers.
      
      Python
      * Updated RPC interfaces to allow for blocking operation.  A client may
        now pass None for a callback when making an RPC, in which case the
        call will block until the response is received, and the response
        object will be returned directly to the caller.  This interface change
        cannot be used in practice until RPC implementations are updated to
        implement it.
      2d6daa72
  3. 24 Dec, 2008 1 commit
  4. 05 Dec, 2008 2 commits
  5. 04 Dec, 2008 1 commit
  6. 02 Dec, 2008 3 commits
  7. 01 Dec, 2008 1 commit
  8. 25 Nov, 2008 1 commit
  9. 21 Nov, 2008 1 commit
    • kenton@google.com's avatar
      Integrate changes from internal code. · 26bd9eee
      kenton@google.com authored
      protoc
      * Enum values may now have custom options, using syntax similar to field
        options.
      * Fixed bug where .proto files which use custom options but don't actually
        define them (i.e. they import another .proto file defining the options)
        had to explicitly import descriptor.proto.
      * Adjacent string literals in .proto files will now be concatenated, like in
        C.
      
      C++
      * Generated message classes now have a Swap() method which efficiently swaps
        the contents of two objects.
      * All message classes now have a SpaceUsed() method which returns an estimate
        of the number of bytes of allocated memory currently owned by the object.
        This is particularly useful when you are reusing a single message object
        to improve performance but want to make sure it doesn't bloat up too large.
      * New method Message::SerializeAsString() returns a string containing the
        serialized data.  May be more convenient than calling
        SerializeToString(string*).
      * In debug mode, log error messages when string-type fields are found to
        contain bytes that are not valid UTF-8.
      * Fixed bug where a message with multiple extension ranges couldn't parse
        extensions.
      * Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on
        a message that contained no fields (but possibly contained extensions).
      * Fixed ShortDebugString() to not be O(n^2).  Durr.
      * Fixed crash in TextFormat parsing if the first token in the input caused a
        tokenization error.
      
      Java
      * New overload of mergeFrom() which parses a slice of a byte array instead
        of the whole thing.
      * New method ByteString.asReadOnlyByteBuffer() does what it sounds like.
      * Improved performance of isInitialized() when optimizing for code size.
      
      Python
      * Corrected ListFields() signature in Message base class to match what
        subclasses actually implement.
      * Some minor refactoring.
      26bd9eee
  10. 14 Nov, 2008 1 commit
  11. 07 Nov, 2008 3 commits
    • kenton@google.com's avatar
      Fix bugs in zero_copy_stream_impl. · 8da400ed
      kenton@google.com authored
      Patch from Frank Chu.
      8da400ed
    • kenton@google.com's avatar
    • kenton@google.com's avatar
      Fixed alignment issue that caused bus errors on platforms like sparc which · d0580eaf
      kenton@google.com authored
      require all memory reads to be aligned.  Specifically, it turns out that
      sizeof(RepeatedField<bool>) is 20 on 64-bit sparc with GCC 3.4.6.  This is
      strange, since one of RepeatedField's members is a pointer, which I thought
      meant that it had to be 64-bit aligned, which means its size should be a
      multiple of 64 bits.  But, 20 is not a multiple of 8.  I don't understand why
      this is the case, but if this is possible, then DynamicMessage's strategy of
      sorting fields in descending order by size and then tightly packing doesn't
      work.  To fix this, I got rid of the sort step and instead added code that
      aligns each field's offset appropriately based on the field's size.
      
      Also in this revision:  Fix an error message that named a flag incorrectly.
      d0580eaf
  12. 06 Nov, 2008 2 commits
    • kenton@google.com's avatar
      Simplify some template usage so that older compilers can handle it. (Users · de754375
      kenton@google.com authored
      report that MSVC 2003 in particular needs this change.)
      de754375
    • kenton@google.com's avatar
      Work around GCC 4.3.0 x86_64 compiler bug (seen on Fedora 9). · 3e91fcdd
      kenton@google.com authored
      Details:
      
      For each message type, protoc generates an array of byte offsets of each of
      the fields within the message class.  These offsets are later used by the
      reflection implementation.  Prior to this revision, the offset arrays were
      allocated as global variables.  Since they were just arrays of ints, they
      should have been initialized at compile time.  Unfortunately, GCC 4.3.0
      incorrectly decides that they cannot be initialized at compile time because
      the values used to initialize the array have type ptrdiff_t, and GCC 4.3.0
      does not recognize that it can convert ptrdiff_t to int at compile time.  This
      bug did not seem to exist in previous versions of GCC.  Google's compiler
      team has submitted a fix for this bug back to the GCC project, but we will
      have to work around it anyway since Fedora 9 shipped with GCC 4.3.0.
      3e91fcdd
  13. 21 Oct, 2008 1 commit
  14. 16 Oct, 2008 2 commits
  15. 07 Oct, 2008 1 commit
  16. 03 Oct, 2008 1 commit
  17. 30 Sep, 2008 5 commits
  18. 24 Sep, 2008 2 commits
    • kenton@google.com's avatar
      Add file missing from rev 50. · 0b3023fa
      kenton@google.com authored
      0b3023fa
    • kenton@google.com's avatar
      Integrate changes from internal Google-internal branch. · 24bf56fb
      kenton@google.com authored
        General
        * License changed from Apache 2.0 to New BSD.
        * It is now possible to define custom "options", which are basically
          annotations which may be placed on definitions in a .proto file.
          For example, you might define a field option called "foo" like so:
            import "google/protobuf/descriptor.proto"
            extend google.protobuf.FieldOptions {
              optional string foo = 12345;
            }
          Then you annotate a field using the "foo" option:
            message MyMessage {
              optional int32 some_field = 1 [(foo) = "bar"]
            }
          The value of this option is then visible via the message's
          Descriptor:
            const FieldDescriptor* field =
              MyMessage::descriptor()->FindFieldByName("some_field");
            assert(field->options().GetExtension(foo) == "bar");
          This feature has been implemented and tested in C++ and Java.
          Other languages may or may not need to do extra work to support
          custom options, depending on how they construct descriptors.
      
        C++
        * Fixed some GCC warnings that only occur when using -pedantic.
        * Improved static initialization code, making ordering more
          predictable among other things.
        * TextFormat will no longer accept messages which contain multiple
          instances of a singular field.  Previously, the latter instance
          would overwrite the former.
        * Now works on systems that don't have hash_map.
      
        Python
        * Strings now use the "unicode" type rather than the "str" type.
          String fields may still be assigned ASCII "str" values; they will
          automatically be converted.
        * Adding a property to an object representing a repeated field now
          raises an exception.  For example:
            # No longer works (and never should have).
            message.some_repeated_field.foo = 1
      24bf56fb
  19. 23 Sep, 2008 2 commits
  20. 19 Sep, 2008 1 commit
  21. 17 Sep, 2008 1 commit
  22. 15 Sep, 2008 1 commit
  23. 27 Aug, 2008 1 commit
  24. 18 Aug, 2008 2 commits
  25. 15 Aug, 2008 1 commit
  26. 13 Aug, 2008 1 commit