| Index: third_party/protobuf/src/google/protobuf/message.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/message.h b/third_party/protobuf/src/google/protobuf/message.h
|
| index 18c092d051e663d6bd34c014d23b7d0ebd4500aa..0f90bc1a15bd6d0001129796dd09de4f30641d2f 100644
|
| --- a/third_party/protobuf/src/google/protobuf/message.h
|
| +++ b/third_party/protobuf/src/google/protobuf/message.h
|
| @@ -1,6 +1,6 @@
|
| // Protocol Buffers - Google's data interchange format
|
| // Copyright 2008 Google Inc. All rights reserved.
|
| -// https://developers.google.com/protocol-buffers/
|
| +// http://code.google.com/p/protobuf/
|
| //
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| @@ -98,11 +98,11 @@
|
| //
|
| // // Use the reflection interface to examine the contents.
|
| // const Reflection* reflection = foo->GetReflection();
|
| -// assert(reflection->GetString(*foo, text_field) == "Hello World!");
|
| -// assert(reflection->FieldSize(*foo, numbers_field) == 3);
|
| -// assert(reflection->GetRepeatedInt32(*foo, numbers_field, 0) == 1);
|
| -// assert(reflection->GetRepeatedInt32(*foo, numbers_field, 1) == 5);
|
| -// assert(reflection->GetRepeatedInt32(*foo, numbers_field, 2) == 42);
|
| +// assert(reflection->GetString(foo, text_field) == "Hello World!");
|
| +// assert(reflection->FieldSize(foo, numbers_field) == 3);
|
| +// assert(reflection->GetRepeatedInt32(foo, numbers_field, 0) == 1);
|
| +// assert(reflection->GetRepeatedInt32(foo, numbers_field, 1) == 5);
|
| +// assert(reflection->GetRepeatedInt32(foo, numbers_field, 2) == 42);
|
| //
|
| // delete foo;
|
| // }
|
| @@ -110,21 +110,22 @@
|
| #ifndef GOOGLE_PROTOBUF_MESSAGE_H__
|
| #define GOOGLE_PROTOBUF_MESSAGE_H__
|
|
|
| -#include <iosfwd>
|
| -#include <string>
|
| -#include <google/protobuf/stubs/type_traits.h>
|
| #include <vector>
|
| +#include <string>
|
| +
|
| +#ifdef __DECCXX
|
| +// HP C++'s iosfwd doesn't work.
|
| +#include <iostream>
|
| +#else
|
| +#include <iosfwd>
|
| +#endif
|
|
|
| -#include <google/protobuf/arena.h>
|
| #include <google/protobuf/message_lite.h>
|
|
|
| #include <google/protobuf/stubs/common.h>
|
| #include <google/protobuf/descriptor.h>
|
|
|
|
|
| -#define GOOGLE_PROTOBUF_HAS_ONEOF
|
| -#define GOOGLE_PROTOBUF_HAS_ARENAS
|
| -
|
| namespace google {
|
| namespace protobuf {
|
|
|
| @@ -177,27 +178,15 @@ class LIBPROTOBUF_EXPORT Message : public MessageLite {
|
| // for return-type covariance.)
|
| virtual Message* New() const = 0;
|
|
|
| - // Construct a new instance on the arena. Ownership is passed to the caller
|
| - // if arena is a NULL. Default implementation allows for API compatibility
|
| - // during the Arena transition.
|
| - virtual Message* New(::google::protobuf::Arena* arena) const {
|
| - Message* message = New();
|
| - if (arena != NULL) {
|
| - arena->Own(message);
|
| - }
|
| - return message;
|
| - }
|
| -
|
| // Make this message into a copy of the given message. The given message
|
| // must have the same descriptor, but need not necessarily be the same class.
|
| // By default this is just implemented as "Clear(); MergeFrom(from);".
|
| virtual void CopyFrom(const Message& from);
|
|
|
| // Merge the fields from the given message into this message. Singular
|
| - // fields will be overwritten, if specified in from, except for embedded
|
| - // messages which will be merged. Repeated fields will be concatenated.
|
| - // The given message must be of the same type as this message (i.e. the
|
| - // exact same class).
|
| + // fields will be overwritten, except for embedded messages which will
|
| + // be merged. Repeated fields will be concatenated. The given message
|
| + // must be of the same type as this message (i.e. the exact same class).
|
| virtual void MergeFrom(const Message& from);
|
|
|
| // Verifies that IsInitialized() returns true. GOOGLE_CHECK-fails otherwise, with
|
| @@ -208,7 +197,7 @@ class LIBPROTOBUF_EXPORT Message : public MessageLite {
|
| // This is much, much slower than IsInitialized() as it is implemented
|
| // purely via reflection. Generally, you should not call this unless you
|
| // have already determined that an error exists by calling IsInitialized().
|
| - void FindInitializationErrors(std::vector<string>* errors) const;
|
| + void FindInitializationErrors(vector<string>* errors) const;
|
|
|
| // Like FindInitializationErrors, but joins all the strings, delimited by
|
| // commas, and returns them.
|
| @@ -229,11 +218,6 @@ class LIBPROTOBUF_EXPORT Message : public MessageLite {
|
| // Computes (an estimate of) the total number of bytes currently used for
|
| // storing the message in memory. The default implementation calls the
|
| // Reflection object's SpaceUsed() method.
|
| - //
|
| - // SpaceUsed() is noticeably slower than ByteSize(), as it is implemented
|
| - // using reflection (rather than the generated code implementation for
|
| - // ByteSize()). Like ByteSize(), its CPU time is linear in the number of
|
| - // fields defined for the proto.
|
| virtual int SpaceUsed() const;
|
|
|
| // Debugging & Testing----------------------------------------------
|
| @@ -332,20 +316,6 @@ class LIBPROTOBUF_EXPORT Message : public MessageLite {
|
| GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Message);
|
| };
|
|
|
| -namespace internal {
|
| -// Forward-declare interfaces used to implement RepeatedFieldRef.
|
| -// These are protobuf internals that users shouldn't care about.
|
| -class RepeatedFieldAccessor;
|
| -} // namespace internal
|
| -
|
| -// Forward-declare RepeatedFieldRef templates. The second type parameter is
|
| -// used for SFINAE tricks. Users should ignore it.
|
| -template<typename T, typename Enable = void>
|
| -class RepeatedFieldRef;
|
| -
|
| -template<typename T, typename Enable = void>
|
| -class MutableRepeatedFieldRef;
|
| -
|
| // This interface contains methods that can be used to dynamically access
|
| // and modify the fields of a protocol message. Their semantics are
|
| // similar to the accessors the protocol compiler generates.
|
| @@ -394,15 +364,12 @@ class LIBPROTOBUF_EXPORT Reflection {
|
|
|
| // Get the UnknownFieldSet for the message. This contains fields which
|
| // were seen when the Message was parsed but were not recognized according
|
| - // to the Message's definition. For proto3 protos, this method will always
|
| - // return an empty UnknownFieldSet.
|
| + // to the Message's definition.
|
| virtual const UnknownFieldSet& GetUnknownFields(
|
| const Message& message) const = 0;
|
| // Get a mutable pointer to the UnknownFieldSet for the message. This
|
| // contains fields which were seen when the Message was parsed but were not
|
| - // recognized according to the Message's definition. For proto3 protos, this
|
| - // method will return a valid mutable UnknownFieldSet pointer but modifying
|
| - // it won't affect the serialized bytes of the message.
|
| + // recognized according to the Message's definition.
|
| virtual UnknownFieldSet* MutableUnknownFields(Message* message) const = 0;
|
|
|
| // Estimate the amount of memory used by the message object.
|
| @@ -421,26 +388,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual void ClearField(Message* message,
|
| const FieldDescriptor* field) const = 0;
|
|
|
| - // Check if the oneof is set. Returns true if any field in oneof
|
| - // is set, false otherwise.
|
| - // TODO(jieluo) - make it pure virtual after updating all
|
| - // the subclasses.
|
| - virtual bool HasOneof(const Message& /*message*/,
|
| - const OneofDescriptor* /*oneof_descriptor*/) const {
|
| - return false;
|
| - }
|
| -
|
| - virtual void ClearOneof(Message* /*message*/,
|
| - const OneofDescriptor* /*oneof_descriptor*/) const {}
|
| -
|
| - // Returns the field descriptor if the oneof is set. NULL otherwise.
|
| - // TODO(jieluo) - make it pure virtual.
|
| - virtual const FieldDescriptor* GetOneofFieldDescriptor(
|
| - const Message& /*message*/,
|
| - const OneofDescriptor* /*oneof_descriptor*/) const {
|
| - return NULL;
|
| - }
|
| -
|
| // Removes the last element of a repeated field.
|
| // We don't provide a way to remove any element other than the last
|
| // because it invites inefficient use, such as O(n^2) filtering loops
|
| @@ -458,26 +405,19 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| // Swap the complete contents of two messages.
|
| virtual void Swap(Message* message1, Message* message2) const = 0;
|
|
|
| - // Swap fields listed in fields vector of two messages.
|
| - virtual void SwapFields(Message* message1,
|
| - Message* message2,
|
| - const std::vector<const FieldDescriptor*>& fields)
|
| - const = 0;
|
| -
|
| // Swap two elements of a repeated field.
|
| virtual void SwapElements(Message* message,
|
| - const FieldDescriptor* field,
|
| - int index1,
|
| - int index2) const = 0;
|
| + const FieldDescriptor* field,
|
| + int index1,
|
| + int index2) const = 0;
|
|
|
| // List all fields of the message which are currently set. This includes
|
| // extensions. Singular fields will only be listed if HasField(field) would
|
| // return true and repeated fields will only be listed if FieldSize(field)
|
| // would return non-zero. Fields (both normal fields and extension fields)
|
| // will be listed ordered by field number.
|
| - virtual void ListFields(
|
| - const Message& message,
|
| - std::vector<const FieldDescriptor*>* output) const = 0;
|
| + virtual void ListFields(const Message& message,
|
| + vector<const FieldDescriptor*>* output) const = 0;
|
|
|
| // Singular field getters ------------------------------------------
|
| // These get the value of a non-repeated field. They return the default
|
| @@ -501,15 +441,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| const FieldDescriptor* field) const = 0;
|
| virtual const EnumValueDescriptor* GetEnum(
|
| const Message& message, const FieldDescriptor* field) const = 0;
|
| -
|
| - // GetEnumValue() returns an enum field's value as an integer rather than
|
| - // an EnumValueDescriptor*. If the integer value does not correspond to a
|
| - // known value descriptor, a new value descriptor is created. (Such a value
|
| - // will only be present when the new unknown-enum-value semantics are enabled
|
| - // for a message.)
|
| - virtual int GetEnumValue(
|
| - const Message& message, const FieldDescriptor* field) const;
|
| -
|
| // See MutableMessage() for the meaning of the "factory" parameter.
|
| virtual const Message& GetMessage(const Message& message,
|
| const FieldDescriptor* field,
|
| @@ -529,7 +460,7 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| // regardless of the field's underlying representation. When initializing
|
| // a newly-constructed string, though, it's just as fast and more readable
|
| // to use code like:
|
| - // string str = reflection->GetString(message, field);
|
| + // string str = reflection->GetString(field);
|
| virtual const string& GetStringReference(const Message& message,
|
| const FieldDescriptor* field,
|
| string* scratch) const = 0;
|
| @@ -558,14 +489,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual void SetEnum (Message* message,
|
| const FieldDescriptor* field,
|
| const EnumValueDescriptor* value) const = 0;
|
| - // Set an enum field's value with an integer rather than EnumValueDescriptor.
|
| - // If the value does not correspond to a known enum value, either behavior is
|
| - // undefined (for proto2 messages), or the value is accepted silently for
|
| - // messages with new unknown-enum-value semantics.
|
| - virtual void SetEnumValue(Message* message,
|
| - const FieldDescriptor* field,
|
| - int value) const;
|
| -
|
| // Get a mutable pointer to a field with a message type. If a MessageFactory
|
| // is provided, it will be used to construct instances of the sub-message;
|
| // otherwise, the default factory is used. If the field is an extension that
|
| @@ -579,13 +502,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual Message* MutableMessage(Message* message,
|
| const FieldDescriptor* field,
|
| MessageFactory* factory = NULL) const = 0;
|
| - // Replaces the message specified by 'field' with the already-allocated object
|
| - // sub_message, passing ownership to the message. If the field contained a
|
| - // message, that message is deleted. If sub_message is NULL, the field is
|
| - // cleared.
|
| - virtual void SetAllocatedMessage(Message* message,
|
| - Message* sub_message,
|
| - const FieldDescriptor* field) const = 0;
|
| // Releases the message specified by 'field' and returns the pointer,
|
| // ReleaseMessage() will return the message the message object if it exists.
|
| // Otherwise, it may or may not return NULL. In any case, if the return value
|
| @@ -628,14 +544,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual const EnumValueDescriptor* GetRepeatedEnum(
|
| const Message& message,
|
| const FieldDescriptor* field, int index) const = 0;
|
| - // GetRepeatedEnumValue() returns an enum field's value as an integer rather
|
| - // than an EnumValueDescriptor*. If the integer value does not correspond to a
|
| - // known value descriptor, a new value descriptor is created. (Such a value
|
| - // will only be present when the new unknown-enum-value semantics are enabled
|
| - // for a message.)
|
| - virtual int GetRepeatedEnumValue(
|
| - const Message& message,
|
| - const FieldDescriptor* field, int index) const;
|
| virtual const Message& GetRepeatedMessage(
|
| const Message& message,
|
| const FieldDescriptor* field, int index) const = 0;
|
| @@ -676,13 +584,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual void SetRepeatedEnum(Message* message,
|
| const FieldDescriptor* field, int index,
|
| const EnumValueDescriptor* value) const = 0;
|
| - // Set an enum field's value with an integer rather than EnumValueDescriptor.
|
| - // If the value does not correspond to a known enum value, either behavior is
|
| - // undefined (for proto2 messages), or the value is accepted silently for
|
| - // messages with new unknown-enum-value semantics.
|
| - virtual void SetRepeatedEnumValue(Message* message,
|
| - const FieldDescriptor* field, int index,
|
| - int value) const;
|
| // Get a mutable pointer to an element of a repeated field with a message
|
| // type.
|
| virtual Message* MutableRepeatedMessage(
|
| @@ -712,57 +613,12 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual void AddEnum (Message* message,
|
| const FieldDescriptor* field,
|
| const EnumValueDescriptor* value) const = 0;
|
| - // Set an enum field's value with an integer rather than EnumValueDescriptor.
|
| - // If the value does not correspond to a known enum value, either behavior is
|
| - // undefined (for proto2 messages), or the value is accepted silently for
|
| - // messages with new unknown-enum-value semantics.
|
| - virtual void AddEnumValue(Message* message,
|
| - const FieldDescriptor* field,
|
| - int value) const;
|
| // See MutableMessage() for comments on the "factory" parameter.
|
| virtual Message* AddMessage(Message* message,
|
| const FieldDescriptor* field,
|
| MessageFactory* factory = NULL) const = 0;
|
|
|
|
|
| - // Get a RepeatedFieldRef object that can be used to read the underlying
|
| - // repeated field. The type parameter T must be set according to the
|
| - // field's cpp type. The following table shows the mapping from cpp type
|
| - // to acceptable T.
|
| - //
|
| - // field->cpp_type() T
|
| - // CPPTYPE_INT32 int32
|
| - // CPPTYPE_UINT32 uint32
|
| - // CPPTYPE_INT64 int64
|
| - // CPPTYPE_UINT64 uint64
|
| - // CPPTYPE_DOUBLE double
|
| - // CPPTYPE_FLOAT float
|
| - // CPPTYPE_BOOL bool
|
| - // CPPTYPE_ENUM generated enum type or int32
|
| - // CPPTYPE_STRING string
|
| - // CPPTYPE_MESSAGE generated message type or google::protobuf::Message
|
| - //
|
| - // A RepeatedFieldRef object can be copied and the resulted object will point
|
| - // to the same repeated field in the same message. The object can be used as
|
| - // long as the message is not destroyed.
|
| - //
|
| - // Note that to use this method users need to include the header file
|
| - // "google/protobuf/reflection.h" (which defines the RepeatedFieldRef
|
| - // class templates).
|
| - template<typename T>
|
| - RepeatedFieldRef<T> GetRepeatedFieldRef(
|
| - const Message& message, const FieldDescriptor* field) const;
|
| -
|
| - // Like GetRepeatedFieldRef() but return an object that can also be used
|
| - // manipulate the underlying repeated field.
|
| - template<typename T>
|
| - MutableRepeatedFieldRef<T> GetMutableRepeatedFieldRef(
|
| - Message* message, const FieldDescriptor* field) const;
|
| -
|
| - // DEPRECATED. Please use Get(Mutable)RepeatedFieldRef() for repeated field
|
| - // access. The following repeated field accesors will be removed in the
|
| - // future.
|
| - //
|
| // Repeated field accessors -------------------------------------------------
|
| // The methods above, e.g. GetRepeatedInt32(msg, fd, index), provide singular
|
| // access to the data in a RepeatedField. The methods below provide aggregate
|
| @@ -773,30 +629,22 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| //
|
| // Usage example: my_doubs = refl->GetRepeatedField<double>(msg, fd);
|
|
|
| - // DEPRECATED. Please use GetRepeatedFieldRef().
|
| - //
|
| // for T = Cord and all protobuf scalar types except enums.
|
| template<typename T>
|
| const RepeatedField<T>& GetRepeatedField(
|
| const Message&, const FieldDescriptor*) const;
|
|
|
| - // DEPRECATED. Please use GetMutableRepeatedFieldRef().
|
| - //
|
| // for T = Cord and all protobuf scalar types except enums.
|
| template<typename T>
|
| RepeatedField<T>* MutableRepeatedField(
|
| Message*, const FieldDescriptor*) const;
|
|
|
| - // DEPRECATED. Please use GetRepeatedFieldRef().
|
| - //
|
| // for T = string, google::protobuf::internal::StringPieceField
|
| // google::protobuf::Message & descendants.
|
| template<typename T>
|
| const RepeatedPtrField<T>& GetRepeatedPtrField(
|
| const Message&, const FieldDescriptor*) const;
|
|
|
| - // DEPRECATED. Please use GetMutableRepeatedFieldRef().
|
| - //
|
| // for T = string, google::protobuf::internal::StringPieceField
|
| // google::protobuf::Message & descendants.
|
| template<typename T>
|
| @@ -815,52 +663,6 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| virtual const FieldDescriptor* FindKnownExtensionByNumber(
|
| int number) const = 0;
|
|
|
| - // Feature Flags -------------------------------------------------------------
|
| -
|
| - // Does this message support storing arbitrary integer values in enum fields?
|
| - // If |true|, GetEnumValue/SetEnumValue and associated repeated-field versions
|
| - // take arbitrary integer values, and the legacy GetEnum() getter will
|
| - // dynamically create an EnumValueDescriptor for any integer value without
|
| - // one. If |false|, setting an unknown enum value via the integer-based
|
| - // setters results in undefined behavior (in practice, GOOGLE_DCHECK-fails).
|
| - //
|
| - // Generic code that uses reflection to handle messages with enum fields
|
| - // should check this flag before using the integer-based setter, and either
|
| - // downgrade to a compatible value or use the UnknownFieldSet if not. For
|
| - // example:
|
| - //
|
| - // int new_value = GetValueFromApplicationLogic();
|
| - // if (reflection->SupportsUnknownEnumValues()) {
|
| - // reflection->SetEnumValue(message, field, new_value);
|
| - // } else {
|
| - // if (field_descriptor->enum_type()->
|
| - // FindValueByNumver(new_value) != NULL) {
|
| - // reflection->SetEnumValue(message, field, new_value);
|
| - // } else if (emit_unknown_enum_values) {
|
| - // reflection->MutableUnknownFields(message)->AddVarint(
|
| - // field->number(),
|
| - // new_value);
|
| - // } else {
|
| - // // convert value to a compatible/default value.
|
| - // new_value = CompatibleDowngrade(new_value);
|
| - // reflection->SetEnumValue(message, field, new_value);
|
| - // }
|
| - // }
|
| - virtual bool SupportsUnknownEnumValues() const { return false; }
|
| -
|
| - // Returns the MessageFactory associated with this message. This can be
|
| - // useful for determining if a message is a generated message or not, for
|
| - // example:
|
| - //
|
| - // if (message->GetReflection()->GetMessageFactory() ==
|
| - // google::protobuf::MessageFactory::generated_factory()) {
|
| - // // This is a generated message.
|
| - // }
|
| - //
|
| - // It can also be used to create more messages of this type, though
|
| - // Message::New() is an easier way to accomplish this.
|
| - virtual MessageFactory* GetMessageFactory() const;
|
| -
|
| // ---------------------------------------------------------------------------
|
|
|
| protected:
|
| @@ -873,36 +675,7 @@ class LIBPROTOBUF_EXPORT Reflection {
|
| Message* message, const FieldDescriptor* field, FieldDescriptor::CppType,
|
| int ctype, const Descriptor* message_type) const = 0;
|
|
|
| - // The following methods are used to implement (Mutable)RepeatedFieldRef.
|
| - // A Ref object will store a raw pointer to the repeated field data (obtained
|
| - // from RepeatedFieldData()) and a pointer to a Accessor (obtained from
|
| - // RepeatedFieldAccessor) which will be used to access the raw data.
|
| - //
|
| - // TODO(xiaofeng): Make these methods pure-virtual.
|
| -
|
| - // Returns a raw pointer to the repeated field
|
| - //
|
| - // "cpp_type" and "message_type" are decuded from the type parameter T passed
|
| - // to Get(Mutable)RepeatedFieldRef. If T is a generated message type,
|
| - // "message_type" should be set to its descriptor. Otherwise "message_type"
|
| - // should be set to NULL. Implementations of this method should check whether
|
| - // "cpp_type"/"message_type" is consistent with the actual type of the field.
|
| - virtual void* RepeatedFieldData(
|
| - Message* message, const FieldDescriptor* field,
|
| - FieldDescriptor::CppType cpp_type,
|
| - const Descriptor* message_type) const;
|
| -
|
| - // The returned pointer should point to a singleton instance which implements
|
| - // the RepeatedFieldAccessor interface.
|
| - virtual const internal::RepeatedFieldAccessor* RepeatedFieldAccessor(
|
| - const FieldDescriptor* field) const;
|
| -
|
| private:
|
| - template<typename T, typename Enable>
|
| - friend class RepeatedFieldRef;
|
| - template<typename T, typename Enable>
|
| - friend class MutableRepeatedFieldRef;
|
| -
|
| // Special version for specialized implementations of string. We can't call
|
| // MutableRawRepeatedField directly here because we don't have access to
|
| // FieldOptions::* which are defined in descriptor.pb.h. Including that
|
| @@ -926,7 +699,7 @@ class LIBPROTOBUF_EXPORT MessageFactory {
|
| // Calling this method twice with the same Descriptor returns the same
|
| // object. The returned object remains property of the factory. Also, any
|
| // objects created by calling the prototype's New() method share some data
|
| - // with the prototype, so these must be destroyed before the MessageFactory
|
| + // with the prototype, so these must be destoyed before the MessageFactory
|
| // is destroyed.
|
| //
|
| // The given descriptor must outlive the returned message, and hence must
|
| @@ -1057,6 +830,7 @@ inline RepeatedPtrField<PB>* Reflection::MutableRepeatedPtrField(
|
| FieldDescriptor::CPPTYPE_MESSAGE, -1,
|
| PB::default_instance().GetDescriptor()));
|
| }
|
| +
|
| } // namespace protobuf
|
|
|
| } // namespace google
|
|
|