| Index: third_party/protobuf/src/google/protobuf/generated_message_reflection.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/generated_message_reflection.h b/third_party/protobuf/src/google/protobuf/generated_message_reflection.h
|
| index 2633ab6237915939ab426cdc0c4a812fc7c5b0ea..15fc802ce18eafaad362a7a5aaf3837f3d809064 100644
|
| --- a/third_party/protobuf/src/google/protobuf/generated_message_reflection.h
|
| +++ b/third_party/protobuf/src/google/protobuf/generated_message_reflection.h
|
| @@ -45,7 +45,6 @@
|
| // TODO(jasonh): Remove this once the compiler change to directly include this
|
| // is released to components.
|
| #include <google/protobuf/generated_enum_reflection.h>
|
| -#include <google/protobuf/generated_message_util.h>
|
| #include <google/protobuf/message.h>
|
| #include <google/protobuf/metadata.h>
|
| #include <google/protobuf/unknown_field_set.h>
|
| @@ -74,157 +73,6 @@ class GeneratedMessageReflection;
|
| // Defined in other files.
|
| class ExtensionSet; // extension_set.h
|
|
|
| -// This struct describes the internal layout of the message, hence this is
|
| -// used to act on the message reflectively.
|
| -// default_instance: The default instance of the message. This is only
|
| -// used to obtain pointers to default instances of embedded
|
| -// messages, which GetMessage() will return if the particular
|
| -// sub-message has not been initialized yet. (Thus, all
|
| -// embedded message fields *must* have non-NULL pointers
|
| -// in the default instance.)
|
| -// offsets: An array of ints giving the byte offsets.
|
| -// For each oneof field, the offset is relative to the
|
| -// default_oneof_instance. These can be computed at compile
|
| -// time using the
|
| -// PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET() macro.
|
| -// For each none oneof field, the offset is related to
|
| -// the start of the message object. These can be computed
|
| -// at compile time using the
|
| -// GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET() macro.
|
| -// Besides offsets for all fields, this array also contains
|
| -// offsets for oneof unions. The offset of the i-th oneof
|
| -// union is offsets[descriptor->field_count() + i].
|
| -// has_bit_indices: Mapping from field indexes to their index in the has
|
| -// bit array.
|
| -// has_bits_offset: Offset in the message of an array of uint32s of size
|
| -// descriptor->field_count()/32, rounded up. This is a
|
| -// bitfield where each bit indicates whether or not the
|
| -// corresponding field of the message has been initialized.
|
| -// The bit for field index i is obtained by the expression:
|
| -// has_bits[i / 32] & (1 << (i % 32))
|
| -// unknown_fields_offset: Offset in the message of the UnknownFieldSet for
|
| -// the message.
|
| -// extensions_offset: Offset in the message of the ExtensionSet for the
|
| -// message, or -1 if the message type has no extension
|
| -// ranges.
|
| -// default_oneof_instance: The default instance of the oneofs. It is a
|
| -// struct holding the default value of all oneof fields
|
| -// for this message. It is only used to obtain pointers
|
| -// to default instances of oneof fields, which Get
|
| -// methods will return if the field is not set.
|
| -// oneof_case_offset: Offset in the message of an array of uint32s of
|
| -// size descriptor->oneof_decl_count(). Each uint32
|
| -// indicates what field is set for each oneof.
|
| -// object_size: The size of a message object of this type, as measured
|
| -// by sizeof().
|
| -// arena_offset: If a message doesn't have a unknown_field_set that stores
|
| -// the arena, it must have a direct pointer to the arena.
|
| -struct ReflectionSchema {
|
| - public:
|
| - // Size of a google::protobuf::Message object of this type.
|
| - uint32 GetObjectSize() const { return object_size_; }
|
| -
|
| - // Offset of a non-oneof field. Getting a field offset is slightly more
|
| - // efficient when we know statically that it is not a oneof field.
|
| - uint32 GetFieldOffsetNonOneof(const FieldDescriptor* field) const {
|
| - GOOGLE_DCHECK(!field->containing_oneof());
|
| - return offsets_[field->index()];
|
| - }
|
| -
|
| - // Offset of any field.
|
| - uint32 GetFieldOffset(const FieldDescriptor* field) const {
|
| - if (field->containing_oneof()) {
|
| - size_t offset = field->containing_type()->field_count() +
|
| - field->containing_oneof()->index();
|
| - return offsets_[offset];
|
| - } else {
|
| - return GetFieldOffsetNonOneof(field);
|
| - }
|
| - }
|
| -
|
| - uint32 GetOneofCaseOffset(const OneofDescriptor* oneof_descriptor) const {
|
| - return oneof_case_offset_ + (oneof_descriptor->index() * sizeof(uint32));
|
| - }
|
| -
|
| - bool HasHasbits() const { return has_bits_offset_ != -1; }
|
| -
|
| - // Bit index within the bit array of hasbits. Bit order is low-to-high.
|
| - uint32 HasBitIndex(const FieldDescriptor* field) const {
|
| - GOOGLE_DCHECK(HasHasbits());
|
| - return has_bit_indices_[field->index()];
|
| - }
|
| -
|
| - // Byte offset of the hasbits array.
|
| - uint32 HasBitsOffset() const {
|
| - GOOGLE_DCHECK(HasHasbits());
|
| - return has_bits_offset_;
|
| - }
|
| -
|
| - // The offset of the InternalMetadataWithArenaOffset member.
|
| - // For Lite this will actually be an InternalMetadataWithArenaOffsetLite.
|
| - // The schema doesn't contain enough information to distinguish between
|
| - // these two cases.
|
| - uint32 GetMetadataOffset() const {
|
| - return metadata_offset_;
|
| - }
|
| -
|
| - // Whether this message has an ExtensionSet.
|
| - bool HasExtensionSet() const { return extensions_offset_ != -1; }
|
| -
|
| - // The offset of the ExtensionSet in this message.
|
| - uint32 GetExtensionSetOffset() const {
|
| - GOOGLE_DCHECK(HasExtensionSet());
|
| - return extensions_offset_;
|
| - }
|
| -
|
| - bool IsDefaultInstance(const Message& message) const {
|
| - return &message == default_instance_;
|
| - }
|
| -
|
| - // Returns a pointer to the default value for this field. The size and type
|
| - // of the underlying data depends on the field's type.
|
| - const void *GetFieldDefault(const FieldDescriptor* field) const {
|
| - return field->containing_oneof()
|
| - ? reinterpret_cast<const uint8*>(default_oneof_instance_) +
|
| - offsets_[field->index()]
|
| - : reinterpret_cast<const uint8*>(default_instance_) +
|
| - offsets_[field->index()];
|
| - }
|
| -
|
| - // These members are intended to be private, but we cannot actually make them
|
| - // private because this prevents us from using aggregate initialization of
|
| - // them, ie.
|
| - //
|
| - // ReflectionSchema schema = {a, b, c, d, e, ...};
|
| - // private:
|
| - const Message* default_instance_;
|
| - const uint32* offsets_;
|
| - const uint32* has_bit_indices_;
|
| - int has_bits_offset_;
|
| - int metadata_offset_;
|
| - int extensions_offset_;
|
| - const void* default_oneof_instance_;
|
| - int oneof_case_offset_;
|
| - int object_size_;
|
| -};
|
| -
|
| -// Structs that the code generator emits directly to describe a message.
|
| -// These should never used directly except to build a ReflectionSchema
|
| -// object.
|
| -//
|
| -// EXPERIMENTAL: these are changing rapidly, and may completely disappear
|
| -// or merge with ReflectionSchema.
|
| -struct DefaultInstanceData {
|
| - const Message* default_instance;
|
| - const void* default_oneof_instance;
|
| -};
|
| -
|
| -struct MigrationSchema {
|
| - int32 offsets_index;
|
| - int32 has_bit_indices_index;
|
| - int object_size;
|
| -};
|
| -
|
| // THIS CLASS IS NOT INTENDED FOR DIRECT USE. It is intended for use
|
| // by generated code. This class is just a big hack that reduces code
|
| // size.
|
| @@ -249,23 +97,118 @@ struct MigrationSchema {
|
| // of whatever type the individual field would be. Strings and
|
| // Messages use RepeatedPtrFields while everything else uses
|
| // RepeatedFields.
|
| -class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Reflection {
|
| +class LIBPROTOBUF_EXPORT GeneratedMessageReflection : public Reflection {
|
| public:
|
| // Constructs a GeneratedMessageReflection.
|
| // Parameters:
|
| // descriptor: The descriptor for the message type being implemented.
|
| - // schema: The description of the internal guts of the message.
|
| + // default_instance: The default instance of the message. This is only
|
| + // used to obtain pointers to default instances of embedded
|
| + // messages, which GetMessage() will return if the particular
|
| + // sub-message has not been initialized yet. (Thus, all
|
| + // embedded message fields *must* have non-NULL pointers
|
| + // in the default instance.)
|
| + // offsets: An array of ints giving the byte offsets, relative to
|
| + // the start of the message object, of each field. These can
|
| + // be computed at compile time using the
|
| + // GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET() macro, defined
|
| + // below.
|
| + // has_bits_offset: Offset in the message of an array of uint32s of size
|
| + // descriptor->field_count()/32, rounded up. This is a
|
| + // bitfield where each bit indicates whether or not the
|
| + // corresponding field of the message has been initialized.
|
| + // The bit for field index i is obtained by the expression:
|
| + // has_bits[i / 32] & (1 << (i % 32))
|
| + // unknown_fields_offset: Offset in the message of the UnknownFieldSet for
|
| + // the message.
|
| + // extensions_offset: Offset in the message of the ExtensionSet for the
|
| + // message, or -1 if the message type has no extension
|
| + // ranges.
|
| // pool: DescriptorPool to search for extension definitions. Only
|
| // used by FindKnownExtensionByName() and
|
| // FindKnownExtensionByNumber().
|
| // factory: MessageFactory to use to construct extension messages.
|
| + // object_size: The size of a message object of this type, as measured
|
| + // by sizeof().
|
| GeneratedMessageReflection(const Descriptor* descriptor,
|
| - const ReflectionSchema& schema,
|
| + const Message* default_instance,
|
| + const int offsets[],
|
| + int has_bits_offset,
|
| + int unknown_fields_offset,
|
| + int extensions_offset,
|
| const DescriptorPool* pool,
|
| - MessageFactory* factory);
|
| + MessageFactory* factory,
|
| + int object_size,
|
| + int arena_offset,
|
| + int is_default_instance_offset = -1);
|
|
|
| + // Similar with the construction above. Call this construction if the
|
| + // message has oneof definition.
|
| + // Parameters:
|
| + // offsets: An array of ints giving the byte offsets.
|
| + // For each oneof field, the offset is relative to the
|
| + // default_oneof_instance. These can be computed at compile
|
| + // time using the
|
| + // PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET() macro.
|
| + // For each none oneof field, the offset is related to
|
| + // the start of the message object. These can be computed
|
| + // at compile time using the
|
| + // GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET() macro.
|
| + // Besides offsets for all fields, this array also contains
|
| + // offsets for oneof unions. The offset of the i-th oneof
|
| + // union is offsets[descriptor->field_count() + i].
|
| + // default_oneof_instance: The default instance of the oneofs. It is a
|
| + // struct holding the default value of all oneof fields
|
| + // for this message. It is only used to obtain pointers
|
| + // to default instances of oneof fields, which Get
|
| + // methods will return if the field is not set.
|
| + // oneof_case_offset: Offset in the message of an array of uint32s of
|
| + // size descriptor->oneof_decl_count(). Each uint32
|
| + // indicates what field is set for each oneof.
|
| + // other parameters are the same with the construction above.
|
| + GeneratedMessageReflection(const Descriptor* descriptor,
|
| + const Message* default_instance,
|
| + const int offsets[],
|
| + int has_bits_offset,
|
| + int unknown_fields_offset,
|
| + int extensions_offset,
|
| + const void* default_oneof_instance,
|
| + int oneof_case_offset,
|
| + const DescriptorPool* pool,
|
| + MessageFactory* factory,
|
| + int object_size,
|
| + int arena_offset,
|
| + int is_default_instance_offset = -1);
|
| ~GeneratedMessageReflection();
|
|
|
| + // Shorter-to-call helpers for the above two constructions that work if the
|
| + // pool and factory are the usual, namely, DescriptorPool::generated_pool()
|
| + // and MessageFactory::generated_factory().
|
| +
|
| + static GeneratedMessageReflection* NewGeneratedMessageReflection(
|
| + const Descriptor* descriptor,
|
| + const Message* default_instance,
|
| + const int offsets[],
|
| + int has_bits_offset,
|
| + int unknown_fields_offset,
|
| + int extensions_offset,
|
| + const void* default_oneof_instance,
|
| + int oneof_case_offset,
|
| + int object_size,
|
| + int arena_offset,
|
| + int is_default_instance_offset = -1);
|
| +
|
| + static GeneratedMessageReflection* NewGeneratedMessageReflection(
|
| + const Descriptor* descriptor,
|
| + const Message* default_instance,
|
| + const int offsets[],
|
| + int has_bits_offset,
|
| + int unknown_fields_offset,
|
| + int extensions_offset,
|
| + int object_size,
|
| + int arena_offset,
|
| + int is_default_instance_offset = -1);
|
| +
|
| // implements Reflection -------------------------------------------
|
|
|
| const UnknownFieldSet& GetUnknownFields(const Message& message) const;
|
| @@ -283,11 +226,11 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Refl
|
| Message* ReleaseLast(Message* message, const FieldDescriptor* field) const;
|
| void Swap(Message* message1, Message* message2) const;
|
| void SwapFields(Message* message1, Message* message2,
|
| - const std::vector<const FieldDescriptor*>& fields) const;
|
| + const vector<const FieldDescriptor*>& fields) const;
|
| void SwapElements(Message* message, const FieldDescriptor* field,
|
| int index1, int index2) const;
|
| void ListFields(const Message& message,
|
| - std::vector<const FieldDescriptor*>* output) const;
|
| + vector<const FieldDescriptor*>* output) const;
|
|
|
| int32 GetInt32 (const Message& message,
|
| const FieldDescriptor* field) const;
|
| @@ -490,42 +433,39 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Refl
|
|
|
| private:
|
| friend class GeneratedMessage;
|
| - friend class upb::google_opensource::GMR_Handlers;
|
| -
|
| - const Descriptor* const descriptor_;
|
| - const ReflectionSchema schema_;
|
| - const DescriptorPool* const descriptor_pool_;
|
| - MessageFactory* const message_factory_;
|
|
|
| // To parse directly into a proto2 generated class, the class GMR_Handlers
|
| // needs access to member offsets and hasbits.
|
| - // upb still needs these.
|
| - // TODO(haberman) clean this up.
|
| - const Message* const default_instance_;
|
| - const void* const default_oneof_instance_;
|
| - const uint32* const offsets_;
|
| - const uint32* const has_bits_indices_;
|
| - const int has_bits_offset_;
|
| - const int oneof_case_offset_;
|
| - const int unknown_fields_offset_;
|
| - const int extensions_offset_;
|
| - const int arena_offset_;
|
| - const int object_size_;
|
| -
|
| - template <class T>
|
| - const T& GetRawNonOneof(const Message& message,
|
| - const FieldDescriptor* field) const;
|
| - template <class T>
|
| - T* MutableRawNonOneof(Message* message, const FieldDescriptor* field) const;
|
| + friend class upb::google_opensource::GMR_Handlers;
|
| +
|
| + const Descriptor* descriptor_;
|
| + const Message* default_instance_;
|
| + const void* default_oneof_instance_;
|
| + const int* offsets_;
|
| +
|
| + int has_bits_offset_;
|
| + int oneof_case_offset_;
|
| + int unknown_fields_offset_;
|
| + int extensions_offset_;
|
| + int arena_offset_;
|
| + int is_default_instance_offset_;
|
| + int object_size_;
|
| +
|
| + static const int kHasNoDefaultInstanceField = -1;
|
| +
|
| + const DescriptorPool* descriptor_pool_;
|
| + MessageFactory* message_factory_;
|
|
|
| template <typename Type>
|
| - const Type& GetRaw(const Message& message,
|
| + inline const Type& GetRaw(const Message& message,
|
| const FieldDescriptor* field) const;
|
| template <typename Type>
|
| inline Type* MutableRaw(Message* message,
|
| const FieldDescriptor* field) const;
|
| template <typename Type>
|
| inline const Type& DefaultRaw(const FieldDescriptor* field) const;
|
| + template <typename Type>
|
| + inline const Type& DefaultOneofRaw(const FieldDescriptor* field) const;
|
|
|
| inline const uint32* GetHasBits(const Message& message) const;
|
| inline uint32* MutableHasBits(Message* message) const;
|
| @@ -538,13 +478,13 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Refl
|
| inline const ExtensionSet& GetExtensionSet(const Message& message) const;
|
| inline ExtensionSet* MutableExtensionSet(Message* message) const;
|
| inline Arena* GetArena(Message* message) const;
|
| -
|
| - inline const InternalMetadataWithArena& GetInternalMetadataWithArena(
|
| - const Message& message) const;
|
| -
|
| - inline InternalMetadataWithArena*
|
| + inline const internal::InternalMetadataWithArena&
|
| + GetInternalMetadataWithArena(const Message& message) const;
|
| + inline internal::InternalMetadataWithArena*
|
| MutableInternalMetadataWithArena(Message* message) const;
|
|
|
| + inline bool GetIsDefaultInstance(const Message& message) const;
|
| +
|
| inline bool HasBit(const Message& message,
|
| const FieldDescriptor* field) const;
|
| inline void SetBit(Message* message,
|
| @@ -631,9 +571,6 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Refl
|
| internal::MapFieldBase* MapData(
|
| Message* message, const FieldDescriptor* field) const;
|
|
|
| - friend inline // inline so nobody can call this function.
|
| - void
|
| - RegisterAllTypesInternal(const Metadata* file_level_metadata, int size);
|
| GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratedMessageReflection);
|
| };
|
|
|
| @@ -660,14 +597,14 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Refl
|
| // choose 16 rather than some other number just in case the compiler would
|
| // be confused by an unaligned pointer.
|
| #define GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(TYPE, FIELD) \
|
| - static_cast< ::google::protobuf::uint32>( \
|
| - reinterpret_cast<const char*>( \
|
| - &reinterpret_cast<const TYPE*>(16)->FIELD) - \
|
| + static_cast<int>( \
|
| + reinterpret_cast<const char*>( \
|
| + &reinterpret_cast<const TYPE*>(16)->FIELD) - \
|
| reinterpret_cast<const char*>(16))
|
| #endif
|
|
|
| #define PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ONEOF, FIELD) \
|
| - static_cast< ::google::protobuf::uint32>( \
|
| + static_cast<int>( \
|
| reinterpret_cast<const char*>(&(ONEOF->FIELD)) \
|
| - reinterpret_cast<const char*>(ONEOF))
|
|
|
| @@ -739,25 +676,6 @@ T* DynamicCastToGenerated(Message* from) {
|
| return const_cast<T*>(DynamicCastToGenerated<const T>(message_const));
|
| }
|
|
|
| -LIBPROTOBUF_EXPORT void AssignDescriptors(
|
| - const string& filename, const MigrationSchema* schemas,
|
| - const DefaultInstanceData* default_instance_data, const uint32* offsets,
|
| - MessageFactory* factory,
|
| - // update the following descriptor arrays.
|
| - Metadata* file_level_metadata,
|
| - const EnumDescriptor** file_level_enum_descriptors,
|
| - const ServiceDescriptor** file_level_service_descriptors);
|
| -
|
| -LIBPROTOBUF_EXPORT void AssignDescriptors(
|
| - const string& filename, const ReflectionSchema* schemas,
|
| - MessageFactory* factory,
|
| - // update the following descriptor arrays.
|
| - Metadata* file_level_metadata,
|
| - const EnumDescriptor** file_level_enum_descriptors,
|
| - const ServiceDescriptor** file_level_service_descriptors);
|
| -
|
| -LIBPROTOBUF_EXPORT void RegisterAllTypes(const Metadata* file_level_metadata, int size);
|
| -
|
| } // namespace internal
|
| } // namespace protobuf
|
|
|
|
|