|
@@ -62,6 +62,7 @@
|
|
#include <vector>
|
|
#include <vector>
|
|
|
|
|
|
#include <google/protobuf/stubs/common.h>
|
|
#include <google/protobuf/stubs/common.h>
|
|
|
|
+#include <google/protobuf/stubs/logging.h>
|
|
#include <google/protobuf/stubs/mutex.h>
|
|
#include <google/protobuf/stubs/mutex.h>
|
|
#include <google/protobuf/stubs/once.h>
|
|
#include <google/protobuf/stubs/once.h>
|
|
#include <google/protobuf/port.h>
|
|
#include <google/protobuf/port.h>
|
|
@@ -121,7 +122,7 @@ class Reflection;
|
|
// Defined in descriptor.cc
|
|
// Defined in descriptor.cc
|
|
class DescriptorBuilder;
|
|
class DescriptorBuilder;
|
|
class FileDescriptorTables;
|
|
class FileDescriptorTables;
|
|
-struct Symbol;
|
|
|
|
|
|
+class Symbol;
|
|
|
|
|
|
// Defined in unknown_field_set.h.
|
|
// Defined in unknown_field_set.h.
|
|
class UnknownField;
|
|
class UnknownField;
|
|
@@ -182,15 +183,37 @@ struct DebugStringOptions {
|
|
// which is needed when a pool has lazily_build_dependencies_ set.
|
|
// which is needed when a pool has lazily_build_dependencies_ set.
|
|
// Must be instantiated as mutable in a descriptor.
|
|
// Must be instantiated as mutable in a descriptor.
|
|
namespace internal {
|
|
namespace internal {
|
|
|
|
+
|
|
|
|
+// Data required to do lazy initialization.
|
|
|
|
+struct PROTOBUF_EXPORT LazyInitData {
|
|
|
|
+#ifndef SWIG
|
|
|
|
+ internal::once_flag once;
|
|
|
|
+#endif
|
|
|
|
+ struct Field {
|
|
|
|
+ const std::string* type_name;
|
|
|
|
+ const std::string* default_value_enum_name;
|
|
|
|
+ };
|
|
|
|
+ struct Descriptor {
|
|
|
|
+ const std::string* name;
|
|
|
|
+ const FileDescriptor* file;
|
|
|
|
+ };
|
|
|
|
+ struct File {
|
|
|
|
+ const std::string** dependencies_names;
|
|
|
|
+ };
|
|
|
|
+ union {
|
|
|
|
+ Field field;
|
|
|
|
+ Descriptor descriptor;
|
|
|
|
+ File file;
|
|
|
|
+ };
|
|
|
|
+};
|
|
|
|
+
|
|
class PROTOBUF_EXPORT LazyDescriptor {
|
|
class PROTOBUF_EXPORT LazyDescriptor {
|
|
public:
|
|
public:
|
|
// Init function to be called at init time of a descriptor containing
|
|
// Init function to be called at init time of a descriptor containing
|
|
// a LazyDescriptor.
|
|
// a LazyDescriptor.
|
|
void Init() {
|
|
void Init() {
|
|
descriptor_ = nullptr;
|
|
descriptor_ = nullptr;
|
|
- name_ = nullptr;
|
|
|
|
once_ = nullptr;
|
|
once_ = nullptr;
|
|
- file_ = nullptr;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// Sets the value of the descriptor if it is known during the descriptor
|
|
// Sets the value of the descriptor if it is known during the descriptor
|
|
@@ -220,10 +243,22 @@ class PROTOBUF_EXPORT LazyDescriptor {
|
|
void Once();
|
|
void Once();
|
|
|
|
|
|
const Descriptor* descriptor_;
|
|
const Descriptor* descriptor_;
|
|
- const std::string* name_;
|
|
|
|
- internal::once_flag* once_;
|
|
|
|
- const FileDescriptor* file_;
|
|
|
|
|
|
+ LazyInitData* once_;
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+class PROTOBUF_EXPORT SymbolBase {
|
|
|
|
+ private:
|
|
|
|
+ friend class google::protobuf::Symbol;
|
|
|
|
+ uint8_t symbol_type_;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+// Some types have more than one SymbolBase because they have multiple
|
|
|
|
+// identities in the table. We can't have duplicate direct bases, so we use this
|
|
|
|
+// intermediate base to do so.
|
|
|
|
+// See BuildEnumValue for details.
|
|
|
|
+template <int N>
|
|
|
|
+class PROTOBUF_EXPORT SymbolBaseN : public SymbolBase {};
|
|
|
|
+
|
|
} // namespace internal
|
|
} // namespace internal
|
|
|
|
|
|
// Describes a type of protocol message, or a particular group within a
|
|
// Describes a type of protocol message, or a particular group within a
|
|
@@ -231,7 +266,7 @@ class PROTOBUF_EXPORT LazyDescriptor {
|
|
// Message::GetDescriptor(). Generated message classes also have a
|
|
// Message::GetDescriptor(). Generated message classes also have a
|
|
// static method called descriptor() which returns the type's descriptor.
|
|
// static method called descriptor() which returns the type's descriptor.
|
|
// Use DescriptorPool to construct your own descriptors.
|
|
// Use DescriptorPool to construct your own descriptors.
|
|
-class PROTOBUF_EXPORT Descriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT Descriptor : private internal::SymbolBase {
|
|
public:
|
|
public:
|
|
typedef DescriptorProto Proto;
|
|
typedef DescriptorProto Proto;
|
|
|
|
|
|
@@ -500,6 +535,7 @@ class PROTOBUF_EXPORT Descriptor {
|
|
const FieldDescriptor* map_value() const;
|
|
const FieldDescriptor* map_value() const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef MessageOptions OptionsType;
|
|
typedef MessageOptions OptionsType;
|
|
|
|
|
|
// Allows tests to test CopyTo(proto, true).
|
|
// Allows tests to test CopyTo(proto, true).
|
|
@@ -524,8 +560,16 @@ class PROTOBUF_EXPORT Descriptor {
|
|
// to this descriptor from the file root.
|
|
// to this descriptor from the file root.
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
|
|
+ // True if this is a placeholder for an unknown type.
|
|
|
|
+ bool is_placeholder_ : 1;
|
|
|
|
+ // True if this is a placeholder and the type name wasn't fully-qualified.
|
|
|
|
+ bool is_unqualified_placeholder_ : 1;
|
|
|
|
+ // Well known type. Stored as char to conserve space.
|
|
|
|
+ char well_known_type_;
|
|
|
|
+ int field_count_;
|
|
|
|
+
|
|
|
|
+ // all_names_ = [name, full_name]
|
|
|
|
+ const std::string* all_names_;
|
|
const FileDescriptor* file_;
|
|
const FileDescriptor* file_;
|
|
const Descriptor* containing_type_;
|
|
const Descriptor* containing_type_;
|
|
const MessageOptions* options_;
|
|
const MessageOptions* options_;
|
|
@@ -540,7 +584,6 @@ class PROTOBUF_EXPORT Descriptor {
|
|
ReservedRange* reserved_ranges_;
|
|
ReservedRange* reserved_ranges_;
|
|
const std::string** reserved_names_;
|
|
const std::string** reserved_names_;
|
|
|
|
|
|
- int field_count_;
|
|
|
|
int oneof_decl_count_;
|
|
int oneof_decl_count_;
|
|
int real_oneof_decl_count_;
|
|
int real_oneof_decl_count_;
|
|
int nested_type_count_;
|
|
int nested_type_count_;
|
|
@@ -550,13 +593,6 @@ class PROTOBUF_EXPORT Descriptor {
|
|
int reserved_range_count_;
|
|
int reserved_range_count_;
|
|
int reserved_name_count_;
|
|
int reserved_name_count_;
|
|
|
|
|
|
- // True if this is a placeholder for an unknown type.
|
|
|
|
- bool is_placeholder_;
|
|
|
|
- // True if this is a placeholder and the type name wasn't fully-qualified.
|
|
|
|
- bool is_unqualified_placeholder_;
|
|
|
|
- // Well known type. Stored as char to conserve space.
|
|
|
|
- char well_known_type_;
|
|
|
|
-
|
|
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// of Allocate<Descriptor>() and AllocateArray<Descriptor>() in descriptor.cc
|
|
// of Allocate<Descriptor>() and AllocateArray<Descriptor>() in descriptor.cc
|
|
// and update them to initialize the field.
|
|
// and update them to initialize the field.
|
|
@@ -584,7 +620,7 @@ class PROTOBUF_EXPORT Descriptor {
|
|
// - Given a DescriptorPool, call DescriptorPool::FindExtensionByNumber() or
|
|
// - Given a DescriptorPool, call DescriptorPool::FindExtensionByNumber() or
|
|
// DescriptorPool::FindExtensionByPrintableName().
|
|
// DescriptorPool::FindExtensionByPrintableName().
|
|
// Use DescriptorPool to construct your own descriptors.
|
|
// Use DescriptorPool to construct your own descriptors.
|
|
-class PROTOBUF_EXPORT FieldDescriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT FieldDescriptor : private internal::SymbolBase {
|
|
public:
|
|
public:
|
|
typedef FieldDescriptorProto Proto;
|
|
typedef FieldDescriptorProto Proto;
|
|
|
|
|
|
@@ -727,16 +763,20 @@ class PROTOBUF_EXPORT FieldDescriptor {
|
|
|
|
|
|
// Get the field default value if cpp_type() == CPPTYPE_INT32. If no
|
|
// Get the field default value if cpp_type() == CPPTYPE_INT32. If no
|
|
// explicit default was defined, the default is 0.
|
|
// explicit default was defined, the default is 0.
|
|
- int32 default_value_int32() const;
|
|
|
|
|
|
+ int32_t default_value_int32_t() const;
|
|
|
|
+ int32_t default_value_int32() const { return default_value_int32_t(); }
|
|
// Get the field default value if cpp_type() == CPPTYPE_INT64. If no
|
|
// Get the field default value if cpp_type() == CPPTYPE_INT64. If no
|
|
// explicit default was defined, the default is 0.
|
|
// explicit default was defined, the default is 0.
|
|
- int64 default_value_int64() const;
|
|
|
|
|
|
+ int64_t default_value_int64_t() const;
|
|
|
|
+ int64_t default_value_int64() const { return default_value_int64_t(); }
|
|
// Get the field default value if cpp_type() == CPPTYPE_UINT32. If no
|
|
// Get the field default value if cpp_type() == CPPTYPE_UINT32. If no
|
|
// explicit default was defined, the default is 0.
|
|
// explicit default was defined, the default is 0.
|
|
- uint32 default_value_uint32() const;
|
|
|
|
|
|
+ uint32_t default_value_uint32_t() const;
|
|
|
|
+ uint32_t default_value_uint32() const { return default_value_uint32_t(); }
|
|
// Get the field default value if cpp_type() == CPPTYPE_UINT64. If no
|
|
// Get the field default value if cpp_type() == CPPTYPE_UINT64. If no
|
|
// explicit default was defined, the default is 0.
|
|
// explicit default was defined, the default is 0.
|
|
- uint64 default_value_uint64() const;
|
|
|
|
|
|
+ uint64_t default_value_uint64_t() const;
|
|
|
|
+ uint64_t default_value_uint64() const { return default_value_uint64_t(); }
|
|
// Get the field default value if cpp_type() == CPPTYPE_FLOAT. If no
|
|
// Get the field default value if cpp_type() == CPPTYPE_FLOAT. If no
|
|
// explicit default was defined, the default is 0.0.
|
|
// explicit default was defined, the default is 0.0.
|
|
float default_value_float() const;
|
|
float default_value_float() const;
|
|
@@ -835,6 +875,7 @@ class PROTOBUF_EXPORT FieldDescriptor {
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef FieldOptions OptionsType;
|
|
typedef FieldOptions OptionsType;
|
|
|
|
|
|
// Allows access to GetLocationPath for annotations.
|
|
// Allows access to GetLocationPath for annotations.
|
|
@@ -864,44 +905,57 @@ class PROTOBUF_EXPORT FieldDescriptor {
|
|
// Returns true if this is a map message type.
|
|
// Returns true if this is a map message type.
|
|
bool is_map_message_type() const;
|
|
bool is_map_message_type() const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
- const std::string* lowercase_name_;
|
|
|
|
- const std::string* camelcase_name_;
|
|
|
|
- // If has_json_name_ is true, it's the value specified by the user.
|
|
|
|
- // Otherwise, it has the same value as camelcase_name_.
|
|
|
|
- const std::string* json_name_;
|
|
|
|
- const FileDescriptor* file_;
|
|
|
|
- internal::once_flag* type_once_;
|
|
|
|
- static void TypeOnceInit(const FieldDescriptor* to_init);
|
|
|
|
- void InternalTypeOnceInit() const;
|
|
|
|
- mutable Type type_;
|
|
|
|
- Label label_;
|
|
|
|
bool has_default_value_;
|
|
bool has_default_value_;
|
|
bool proto3_optional_;
|
|
bool proto3_optional_;
|
|
// Whether the user has specified the json_name field option in the .proto
|
|
// Whether the user has specified the json_name field option in the .proto
|
|
// file.
|
|
// file.
|
|
bool has_json_name_;
|
|
bool has_json_name_;
|
|
bool is_extension_;
|
|
bool is_extension_;
|
|
|
|
+
|
|
|
|
+ // Actually a `Type`, but stored as uint8_t to save space.
|
|
|
|
+ mutable uint8_t type_;
|
|
|
|
+ // Actually a `Label` but stored as uint8_t to save space.
|
|
|
|
+ uint8_t label_;
|
|
|
|
+
|
|
|
|
+ bool is_oneof_ : 1;
|
|
|
|
+
|
|
|
|
+ // Logically:
|
|
|
|
+ // all_names_ = [name, full_name, lower, camel, json]
|
|
|
|
+ // However:
|
|
|
|
+ // duplicates will be omitted, so lower/camel/json might be in the same
|
|
|
|
+ // position.
|
|
|
|
+ // We store the true offset for each name here, and the bit width must be
|
|
|
|
+ // large enough to account for the worst case where all names are present.
|
|
|
|
+ uint8_t lowercase_name_index_ : 2;
|
|
|
|
+ uint8_t camelcase_name_index_ : 2;
|
|
|
|
+ uint8_t json_name_index_ : 3;
|
|
|
|
+ const std::string* all_names_;
|
|
|
|
+ const FileDescriptor* file_;
|
|
|
|
+
|
|
|
|
+ internal::LazyInitData* type_once_;
|
|
|
|
+ static void TypeOnceInit(const FieldDescriptor* to_init);
|
|
|
|
+ void InternalTypeOnceInit() const;
|
|
int number_;
|
|
int number_;
|
|
int index_in_oneof_;
|
|
int index_in_oneof_;
|
|
const Descriptor* containing_type_;
|
|
const Descriptor* containing_type_;
|
|
- const OneofDescriptor* containing_oneof_;
|
|
|
|
- const Descriptor* extension_scope_;
|
|
|
|
- mutable const Descriptor* message_type_;
|
|
|
|
- mutable const EnumDescriptor* enum_type_;
|
|
|
|
|
|
+ union {
|
|
|
|
+ const OneofDescriptor* containing_oneof;
|
|
|
|
+ const Descriptor* extension_scope;
|
|
|
|
+ } scope_;
|
|
|
|
+ union {
|
|
|
|
+ mutable const Descriptor* message_type;
|
|
|
|
+ mutable const EnumDescriptor* enum_type;
|
|
|
|
+ } type_descriptor_;
|
|
const FieldOptions* options_;
|
|
const FieldOptions* options_;
|
|
- const std::string* type_name_;
|
|
|
|
- const std::string* default_value_enum_name_;
|
|
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// of Allocate<FieldDescriptor>() and AllocateArray<FieldDescriptor>() in
|
|
// of Allocate<FieldDescriptor>() and AllocateArray<FieldDescriptor>() in
|
|
// descriptor.cc and update them to initialize the field.
|
|
// descriptor.cc and update them to initialize the field.
|
|
|
|
|
|
union {
|
|
union {
|
|
- int32 default_value_int32_;
|
|
|
|
- int64 default_value_int64_;
|
|
|
|
- uint32 default_value_uint32_;
|
|
|
|
- uint64 default_value_uint64_;
|
|
|
|
|
|
+ int32_t default_value_int32_t_;
|
|
|
|
+ int64_t default_value_int64_t_;
|
|
|
|
+ uint32_t default_value_uint32_t_;
|
|
|
|
+ uint64_t default_value_uint64_t_;
|
|
float default_value_float_;
|
|
float default_value_float_;
|
|
double default_value_double_;
|
|
double default_value_double_;
|
|
bool default_value_bool_;
|
|
bool default_value_bool_;
|
|
@@ -930,7 +984,7 @@ class PROTOBUF_EXPORT FieldDescriptor {
|
|
|
|
|
|
|
|
|
|
// Describes a oneof defined in a message type.
|
|
// Describes a oneof defined in a message type.
|
|
-class PROTOBUF_EXPORT OneofDescriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT OneofDescriptor : private internal::SymbolBase {
|
|
public:
|
|
public:
|
|
typedef OneofDescriptorProto Proto;
|
|
typedef OneofDescriptorProto Proto;
|
|
|
|
|
|
@@ -974,6 +1028,7 @@ class PROTOBUF_EXPORT OneofDescriptor {
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef OneofOptions OptionsType;
|
|
typedef OneofOptions OptionsType;
|
|
|
|
|
|
// Allows access to GetLocationPath for annotations.
|
|
// Allows access to GetLocationPath for annotations.
|
|
@@ -988,10 +1043,11 @@ class PROTOBUF_EXPORT OneofDescriptor {
|
|
// to this descriptor from the file root.
|
|
// to this descriptor from the file root.
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
- const Descriptor* containing_type_;
|
|
|
|
int field_count_;
|
|
int field_count_;
|
|
|
|
+
|
|
|
|
+ // all_names_ = [name, full_name]
|
|
|
|
+ const std::string* all_names_;
|
|
|
|
+ const Descriptor* containing_type_;
|
|
const FieldDescriptor** fields_;
|
|
const FieldDescriptor** fields_;
|
|
const OneofOptions* options_;
|
|
const OneofOptions* options_;
|
|
|
|
|
|
@@ -1009,7 +1065,7 @@ class PROTOBUF_EXPORT OneofDescriptor {
|
|
// Describes an enum type defined in a .proto file. To get the EnumDescriptor
|
|
// Describes an enum type defined in a .proto file. To get the EnumDescriptor
|
|
// for a generated enum type, call TypeName_descriptor(). Use DescriptorPool
|
|
// for a generated enum type, call TypeName_descriptor(). Use DescriptorPool
|
|
// to construct your own descriptors.
|
|
// to construct your own descriptors.
|
|
-class PROTOBUF_EXPORT EnumDescriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT EnumDescriptor : private internal::SymbolBase {
|
|
public:
|
|
public:
|
|
typedef EnumDescriptorProto Proto;
|
|
typedef EnumDescriptorProto Proto;
|
|
|
|
|
|
@@ -1101,6 +1157,7 @@ class PROTOBUF_EXPORT EnumDescriptor {
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef EnumOptions OptionsType;
|
|
typedef EnumOptions OptionsType;
|
|
|
|
|
|
// Allows access to GetLocationPath for annotations.
|
|
// Allows access to GetLocationPath for annotations.
|
|
@@ -1126,18 +1183,18 @@ class PROTOBUF_EXPORT EnumDescriptor {
|
|
// to this descriptor from the file root.
|
|
// to this descriptor from the file root.
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
- const FileDescriptor* file_;
|
|
|
|
- const Descriptor* containing_type_;
|
|
|
|
- const EnumOptions* options_;
|
|
|
|
-
|
|
|
|
// True if this is a placeholder for an unknown type.
|
|
// True if this is a placeholder for an unknown type.
|
|
bool is_placeholder_;
|
|
bool is_placeholder_;
|
|
// True if this is a placeholder and the type name wasn't fully-qualified.
|
|
// True if this is a placeholder and the type name wasn't fully-qualified.
|
|
bool is_unqualified_placeholder_;
|
|
bool is_unqualified_placeholder_;
|
|
|
|
|
|
int value_count_;
|
|
int value_count_;
|
|
|
|
+
|
|
|
|
+ // all_names_ = [name, full_name]
|
|
|
|
+ const std::string* all_names_;
|
|
|
|
+ const FileDescriptor* file_;
|
|
|
|
+ const Descriptor* containing_type_;
|
|
|
|
+ const EnumOptions* options_;
|
|
EnumValueDescriptor* values_;
|
|
EnumValueDescriptor* values_;
|
|
|
|
|
|
int reserved_range_count_;
|
|
int reserved_range_count_;
|
|
@@ -1166,7 +1223,8 @@ class PROTOBUF_EXPORT EnumDescriptor {
|
|
// for its type, then use EnumDescriptor::FindValueByName() or
|
|
// for its type, then use EnumDescriptor::FindValueByName() or
|
|
// EnumDescriptor::FindValueByNumber(). Use DescriptorPool to construct
|
|
// EnumDescriptor::FindValueByNumber(). Use DescriptorPool to construct
|
|
// your own descriptors.
|
|
// your own descriptors.
|
|
-class PROTOBUF_EXPORT EnumValueDescriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT EnumValueDescriptor : private internal::SymbolBaseN<0>,
|
|
|
|
+ private internal::SymbolBaseN<1> {
|
|
public:
|
|
public:
|
|
typedef EnumValueDescriptorProto Proto;
|
|
typedef EnumValueDescriptorProto Proto;
|
|
|
|
|
|
@@ -1209,6 +1267,7 @@ class PROTOBUF_EXPORT EnumValueDescriptor {
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef EnumValueOptions OptionsType;
|
|
typedef EnumValueOptions OptionsType;
|
|
|
|
|
|
// Allows access to GetLocationPath for annotations.
|
|
// Allows access to GetLocationPath for annotations.
|
|
@@ -1223,9 +1282,9 @@ class PROTOBUF_EXPORT EnumValueDescriptor {
|
|
// to this descriptor from the file root.
|
|
// to this descriptor from the file root.
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
int number_;
|
|
int number_;
|
|
|
|
+ // all_names_ = [name, full_name]
|
|
|
|
+ const std::string* all_names_;
|
|
const EnumDescriptor* type_;
|
|
const EnumDescriptor* type_;
|
|
const EnumValueOptions* options_;
|
|
const EnumValueOptions* options_;
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
@@ -1244,7 +1303,7 @@ class PROTOBUF_EXPORT EnumValueDescriptor {
|
|
|
|
|
|
// Describes an RPC service. Use DescriptorPool to construct your own
|
|
// Describes an RPC service. Use DescriptorPool to construct your own
|
|
// descriptors.
|
|
// descriptors.
|
|
-class PROTOBUF_EXPORT ServiceDescriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT ServiceDescriptor : private internal::SymbolBase {
|
|
public:
|
|
public:
|
|
typedef ServiceDescriptorProto Proto;
|
|
typedef ServiceDescriptorProto Proto;
|
|
|
|
|
|
@@ -1289,6 +1348,7 @@ class PROTOBUF_EXPORT ServiceDescriptor {
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef ServiceOptions OptionsType;
|
|
typedef ServiceOptions OptionsType;
|
|
|
|
|
|
// Allows access to GetLocationPath for annotations.
|
|
// Allows access to GetLocationPath for annotations.
|
|
@@ -1303,8 +1363,8 @@ class PROTOBUF_EXPORT ServiceDescriptor {
|
|
// to this descriptor from the file root.
|
|
// to this descriptor from the file root.
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
|
|
+ // all_names_ = [name, full_name]
|
|
|
|
+ const std::string* all_names_;
|
|
const FileDescriptor* file_;
|
|
const FileDescriptor* file_;
|
|
const ServiceOptions* options_;
|
|
const ServiceOptions* options_;
|
|
MethodDescriptor* methods_;
|
|
MethodDescriptor* methods_;
|
|
@@ -1326,7 +1386,7 @@ class PROTOBUF_EXPORT ServiceDescriptor {
|
|
// a service, first get its ServiceDescriptor, then call
|
|
// a service, first get its ServiceDescriptor, then call
|
|
// ServiceDescriptor::FindMethodByName(). Use DescriptorPool to construct your
|
|
// ServiceDescriptor::FindMethodByName(). Use DescriptorPool to construct your
|
|
// own descriptors.
|
|
// own descriptors.
|
|
-class PROTOBUF_EXPORT MethodDescriptor {
|
|
|
|
|
|
+class PROTOBUF_EXPORT MethodDescriptor : private internal::SymbolBase {
|
|
public:
|
|
public:
|
|
typedef MethodDescriptorProto Proto;
|
|
typedef MethodDescriptorProto Proto;
|
|
|
|
|
|
@@ -1375,6 +1435,7 @@ class PROTOBUF_EXPORT MethodDescriptor {
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
bool GetSourceLocation(SourceLocation* out_location) const;
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
+ friend class Symbol;
|
|
typedef MethodOptions OptionsType;
|
|
typedef MethodOptions OptionsType;
|
|
|
|
|
|
// Allows access to GetLocationPath for annotations.
|
|
// Allows access to GetLocationPath for annotations.
|
|
@@ -1389,14 +1450,14 @@ class PROTOBUF_EXPORT MethodDescriptor {
|
|
// to this descriptor from the file root.
|
|
// to this descriptor from the file root.
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
void GetLocationPath(std::vector<int>* output) const;
|
|
|
|
|
|
- const std::string* name_;
|
|
|
|
- const std::string* full_name_;
|
|
|
|
|
|
+ bool client_streaming_;
|
|
|
|
+ bool server_streaming_;
|
|
|
|
+ // all_names_ = [name, full_name]
|
|
|
|
+ const std::string* all_names_;
|
|
const ServiceDescriptor* service_;
|
|
const ServiceDescriptor* service_;
|
|
mutable internal::LazyDescriptor input_type_;
|
|
mutable internal::LazyDescriptor input_type_;
|
|
mutable internal::LazyDescriptor output_type_;
|
|
mutable internal::LazyDescriptor output_type_;
|
|
const MethodOptions* options_;
|
|
const MethodOptions* options_;
|
|
- bool client_streaming_;
|
|
|
|
- bool server_streaming_;
|
|
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// IMPORTANT: If you add a new field, make sure to search for all instances
|
|
// of Allocate<MethodDescriptor>() and AllocateArray<MethodDescriptor>() in
|
|
// of Allocate<MethodDescriptor>() and AllocateArray<MethodDescriptor>() in
|
|
// descriptor.cc and update them to initialize the field.
|
|
// descriptor.cc and update them to initialize the field.
|
|
@@ -1554,7 +1615,7 @@ class PROTOBUF_EXPORT FileDescriptor {
|
|
const std::string* name_;
|
|
const std::string* name_;
|
|
const std::string* package_;
|
|
const std::string* package_;
|
|
const DescriptorPool* pool_;
|
|
const DescriptorPool* pool_;
|
|
- internal::once_flag* dependencies_once_;
|
|
|
|
|
|
+ internal::LazyInitData* dependencies_once_;
|
|
static void DependenciesOnceInit(const FileDescriptor* to_init);
|
|
static void DependenciesOnceInit(const FileDescriptor* to_init);
|
|
void InternalDependenciesOnceInit() const;
|
|
void InternalDependenciesOnceInit() const;
|
|
|
|
|
|
@@ -1565,17 +1626,18 @@ class PROTOBUF_EXPORT FileDescriptor {
|
|
int message_type_count_;
|
|
int message_type_count_;
|
|
int enum_type_count_;
|
|
int enum_type_count_;
|
|
int service_count_;
|
|
int service_count_;
|
|
- int extension_count_;
|
|
|
|
- Syntax syntax_;
|
|
|
|
- bool is_placeholder_;
|
|
|
|
|
|
|
|
|
|
+ bool is_placeholder_;
|
|
// Indicates the FileDescriptor is completed building. Used to verify
|
|
// Indicates the FileDescriptor is completed building. Used to verify
|
|
// that type accessor functions that can possibly build a dependent file
|
|
// that type accessor functions that can possibly build a dependent file
|
|
// aren't called during the process of building the file.
|
|
// aren't called during the process of building the file.
|
|
bool finished_building_;
|
|
bool finished_building_;
|
|
|
|
+ // Actually a `Syntax` but stored as uint8_t to save space.
|
|
|
|
+ uint8_t syntax_;
|
|
|
|
+ // This one is here to fill the padding.
|
|
|
|
+ int extension_count_;
|
|
|
|
|
|
mutable const FileDescriptor** dependencies_;
|
|
mutable const FileDescriptor** dependencies_;
|
|
- const std::string** dependencies_names_;
|
|
|
|
int* public_dependencies_;
|
|
int* public_dependencies_;
|
|
int* weak_dependencies_;
|
|
int* weak_dependencies_;
|
|
Descriptor* message_types_;
|
|
Descriptor* message_types_;
|
|
@@ -1988,6 +2050,11 @@ class PROTOBUF_EXPORT DescriptorPool {
|
|
#define PROTOBUF_DEFINE_STRING_ACCESSOR(CLASS, FIELD) \
|
|
#define PROTOBUF_DEFINE_STRING_ACCESSOR(CLASS, FIELD) \
|
|
inline const std::string& CLASS::FIELD() const { return *FIELD##_; }
|
|
inline const std::string& CLASS::FIELD() const { return *FIELD##_; }
|
|
|
|
|
|
|
|
+// Name and full name are stored in a single array to save space.
|
|
|
|
+#define PROTOBUF_DEFINE_NAME_ACCESSOR(CLASS) \
|
|
|
|
+ inline const std::string& CLASS::name() const { return all_names_[0]; } \
|
|
|
|
+ inline const std::string& CLASS::full_name() const { return all_names_[1]; }
|
|
|
|
+
|
|
// Arrays take an index parameter, obviously.
|
|
// Arrays take an index parameter, obviously.
|
|
#define PROTOBUF_DEFINE_ARRAY_ACCESSOR(CLASS, FIELD, TYPE) \
|
|
#define PROTOBUF_DEFINE_ARRAY_ACCESSOR(CLASS, FIELD, TYPE) \
|
|
inline TYPE CLASS::FIELD(int index) const { return FIELD##s_ + index; }
|
|
inline TYPE CLASS::FIELD(int index) const { return FIELD##s_ + index; }
|
|
@@ -1995,8 +2062,7 @@ class PROTOBUF_EXPORT DescriptorPool {
|
|
#define PROTOBUF_DEFINE_OPTIONS_ACCESSOR(CLASS, TYPE) \
|
|
#define PROTOBUF_DEFINE_OPTIONS_ACCESSOR(CLASS, TYPE) \
|
|
inline const TYPE& CLASS::options() const { return *options_; }
|
|
inline const TYPE& CLASS::options() const { return *options_; }
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(Descriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(Descriptor, full_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(Descriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(Descriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(Descriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(Descriptor, containing_type, const Descriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(Descriptor, containing_type, const Descriptor*)
|
|
|
|
|
|
@@ -2025,40 +2091,30 @@ PROTOBUF_DEFINE_ACCESSOR(Descriptor, reserved_name_count, int)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(Descriptor, MessageOptions)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(Descriptor, MessageOptions)
|
|
PROTOBUF_DEFINE_ACCESSOR(Descriptor, is_placeholder, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(Descriptor, is_placeholder, bool)
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, full_name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, json_name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, lowercase_name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, camelcase_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(FieldDescriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool)
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, label, FieldDescriptor::Label)
|
|
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_type, const Descriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_type, const Descriptor*)
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_oneof,
|
|
|
|
- const OneofDescriptor*)
|
|
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, index_in_oneof, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, index_in_oneof, int)
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, extension_scope, const Descriptor*)
|
|
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_json_name, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_json_name, bool)
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int32, int32)
|
|
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int64, int64)
|
|
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint32, uint32)
|
|
|
|
-PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint64, uint64)
|
|
|
|
|
|
+PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int32_t, int32_t)
|
|
|
|
+PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int64_t, int64_t)
|
|
|
|
+PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint32_t, uint32_t)
|
|
|
|
+PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint64_t, uint64_t)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_float, float)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_float, float)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_double, double)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_double, double)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_bool, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_bool, bool)
|
|
PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, default_value_string)
|
|
PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, default_value_string)
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, full_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(OneofDescriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, containing_type, const Descriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, containing_type, const Descriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, field_count, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, field_count, int)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(OneofDescriptor, OneofOptions)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(OneofDescriptor, OneofOptions)
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(EnumDescriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(EnumDescriptor, full_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(EnumDescriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, containing_type, const Descriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, containing_type, const Descriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, value_count, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, value_count, int)
|
|
@@ -2071,22 +2127,19 @@ PROTOBUF_DEFINE_ARRAY_ACCESSOR(EnumDescriptor, reserved_range,
|
|
const EnumDescriptor::ReservedRange*)
|
|
const EnumDescriptor::ReservedRange*)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, reserved_name_count, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, reserved_name_count, int)
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(EnumValueDescriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(EnumValueDescriptor, full_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(EnumValueDescriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, number, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, number, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, type, const EnumDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, type, const EnumDescriptor*)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumValueDescriptor, EnumValueOptions)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumValueDescriptor, EnumValueOptions)
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(ServiceDescriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(ServiceDescriptor, full_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(ServiceDescriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, file, const FileDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, method_count, int)
|
|
PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, method_count, int)
|
|
PROTOBUF_DEFINE_ARRAY_ACCESSOR(ServiceDescriptor, method,
|
|
PROTOBUF_DEFINE_ARRAY_ACCESSOR(ServiceDescriptor, method,
|
|
const MethodDescriptor*)
|
|
const MethodDescriptor*)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(ServiceDescriptor, ServiceOptions)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(ServiceDescriptor, ServiceOptions)
|
|
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, name)
|
|
|
|
-PROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, full_name)
|
|
|
|
|
|
+PROTOBUF_DEFINE_NAME_ACCESSOR(MethodDescriptor)
|
|
PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, service, const ServiceDescriptor*)
|
|
PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, service, const ServiceDescriptor*)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions)
|
|
PROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions)
|
|
PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, client_streaming, bool)
|
|
PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, client_streaming, bool)
|
|
@@ -2164,11 +2217,36 @@ inline const std::string& EnumDescriptor::reserved_name(int index) const {
|
|
return *reserved_names_[index];
|
|
return *reserved_names_[index];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+inline const std::string& FieldDescriptor::lowercase_name() const {
|
|
|
|
+ return all_names_[lowercase_name_index_];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+inline const std::string& FieldDescriptor::camelcase_name() const {
|
|
|
|
+ return all_names_[camelcase_name_index_];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+inline const std::string& FieldDescriptor::json_name() const {
|
|
|
|
+ return all_names_[json_name_index_];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+inline const OneofDescriptor* FieldDescriptor::containing_oneof() const {
|
|
|
|
+ return is_oneof_ ? scope_.containing_oneof : nullptr;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+inline const Descriptor* FieldDescriptor::extension_scope() const {
|
|
|
|
+ GOOGLE_CHECK(is_extension_);
|
|
|
|
+ return scope_.extension_scope;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+inline FieldDescriptor::Label FieldDescriptor::label() const {
|
|
|
|
+ return static_cast<Label>(label_);
|
|
|
|
+}
|
|
|
|
+
|
|
inline FieldDescriptor::Type FieldDescriptor::type() const {
|
|
inline FieldDescriptor::Type FieldDescriptor::type() const {
|
|
if (type_once_) {
|
|
if (type_once_) {
|
|
- internal::call_once(*type_once_, &FieldDescriptor::TypeOnceInit, this);
|
|
|
|
|
|
+ internal::call_once(type_once_->once, &FieldDescriptor::TypeOnceInit, this);
|
|
}
|
|
}
|
|
- return type_;
|
|
|
|
|
|
+ return static_cast<Type>(type_);
|
|
}
|
|
}
|
|
|
|
|
|
inline bool FieldDescriptor::is_required() const {
|
|
inline bool FieldDescriptor::is_required() const {
|
|
@@ -2198,9 +2276,8 @@ inline bool FieldDescriptor::has_optional_keyword() const {
|
|
}
|
|
}
|
|
|
|
|
|
inline const OneofDescriptor* FieldDescriptor::real_containing_oneof() const {
|
|
inline const OneofDescriptor* FieldDescriptor::real_containing_oneof() const {
|
|
- return containing_oneof_ && !containing_oneof_->is_synthetic()
|
|
|
|
- ? containing_oneof_
|
|
|
|
- : nullptr;
|
|
|
|
|
|
+ auto* oneof = containing_oneof();
|
|
|
|
+ return oneof && !oneof->is_synthetic() ? oneof : nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
inline bool FieldDescriptor::has_presence() const {
|
|
inline bool FieldDescriptor::has_presence() const {
|
|
@@ -2214,8 +2291,8 @@ inline bool FieldDescriptor::has_presence() const {
|
|
inline int FieldDescriptor::index() const {
|
|
inline int FieldDescriptor::index() const {
|
|
if (!is_extension_) {
|
|
if (!is_extension_) {
|
|
return static_cast<int>(this - containing_type()->fields_);
|
|
return static_cast<int>(this - containing_type()->fields_);
|
|
- } else if (extension_scope_ != nullptr) {
|
|
|
|
- return static_cast<int>(this - extension_scope_->extensions_);
|
|
|
|
|
|
+ } else if (extension_scope() != nullptr) {
|
|
|
|
+ return static_cast<int>(this - extension_scope()->extensions_);
|
|
} else {
|
|
} else {
|
|
return static_cast<int>(this - file_->extensions_);
|
|
return static_cast<int>(this - file_->extensions_);
|
|
}
|
|
}
|
|
@@ -2309,7 +2386,9 @@ inline const FileDescriptor* FileDescriptor::weak_dependency(int index) const {
|
|
return dependency(weak_dependencies_[index]);
|
|
return dependency(weak_dependencies_[index]);
|
|
}
|
|
}
|
|
|
|
|
|
-inline FileDescriptor::Syntax FileDescriptor::syntax() const { return syntax_; }
|
|
|
|
|
|
+inline FileDescriptor::Syntax FileDescriptor::syntax() const {
|
|
|
|
+ return static_cast<Syntax>(syntax_);
|
|
|
|
+}
|
|
|
|
|
|
// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because fields_ is actually an array
|
|
// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because fields_ is actually an array
|
|
// of pointers rather than the usual array of objects.
|
|
// of pointers rather than the usual array of objects.
|