Go to the documentation of this file.
38 #ifndef GOOGLE_PROTOBUF_EXTENSION_SET_H__
39 #define GOOGLE_PROTOBUF_EXTENSION_SET_H__
48 #include <google/protobuf/stubs/common.h>
49 #include <google/protobuf/stubs/logging.h>
50 #include <google/protobuf/parse_context.h>
51 #include <google/protobuf/io/coded_stream.h>
52 #include <google/protobuf/port.h>
53 #include <google/protobuf/repeated_field.h>
54 #include <google/protobuf/wire_format_lite.h>
57 #include <google/protobuf/port_def.inc>
61 #error "You cannot SWIG proto headers"
85 class InternalMetadata;
103 struct ExtensionInfo {
106 FieldType type_param,
bool isrepeated,
bool ispacked)
143 class PROTOBUF_EXPORT ExtensionFinder {
145 virtual ~ExtensionFinder();
153 class PROTOBUF_EXPORT GeneratedExtensionFinder :
public ExtensionFinder {
156 : extendee_(extendee) {}
210 std::vector<const FieldDescriptor*>*
output)
const;
242 bool Has(
int number)
const;
243 int ExtensionSize(
int number)
const;
244 int NumExtensions()
const;
254 float GetFloat(
int number,
float default_value)
const;
255 double GetDouble(
int number,
double default_value)
const;
256 bool GetBool(
int number,
bool default_value)
const;
257 int GetEnum(
int number,
int default_value)
const;
268 #define desc const FieldDescriptor* descriptor // avoid line wrapping
309 const void* GetRawRepeatedField(
int number,
const void* default_value)
const;
320 void* MutableRawRepeatedField(
int number);
326 float GetRepeatedFloat(
int number,
int index)
const;
327 double GetRepeatedDouble(
int number,
int index)
const;
345 #define desc const FieldDescriptor* descriptor // avoid line wrapping
359 MessageFactory* factory);
366 void RemoveLast(
int number);
369 void SwapElements(
int number,
int index1,
int index2);
383 void InternalSwap(ExtensionSet* other);
384 void SwapExtension(
const MessageLite* extendee, ExtensionSet* other,
386 void UnsafeShallowSwapExtension(ExtensionSet* other,
int number);
392 ExtensionFinder* extension_finder,
393 FieldSkipper* field_skipper);
412 internal::InternalMetadata*
metadata,
413 internal::ParseContext*
ctx);
416 internal::InternalMetadata*
metadata,
417 internal::ParseContext*
ctx);
418 template <
typename Msg>
422 struct MessageSetItem {
430 while (!
ctx->Done(&
ptr)) {
438 if (
tag == 0 || (
tag & 7) == 4) {
470 int start_field_number,
int end_field_number,
473 end_field_number,
output->Cur(),
484 int start_field_number,
int end_field_number,
487 if (flat_size_ == 0) {
491 return _InternalSerializeImpl(extendee, start_field_number,
498 output->SetCur(InternalSerializeMessageSetWithCachedSizesToArray(
501 uint8_t* InternalSerializeMessageSetWithCachedSizesToArray(
508 uint8_t* SerializeWithCachedSizesToArray(
int start_field_number,
509 int end_field_number,
511 uint8_t* SerializeMessageSetWithCachedSizesToArray(
518 size_t MessageSetByteSize()
const;
527 size_t SpaceUsedExcludingSelfLong()
const;
534 int SpaceUsedExcludingSelf()
const;
537 template <
typename Type>
540 template <
typename Type>
543 template <
typename Type,
bool IsVal
id(
int)>
546 template <
typename Type,
bool IsVal
id(
int)>
555 const float& GetRefFloat(
int number,
const float& default_value)
const;
556 const double& GetRefDouble(
int number,
const double& default_value)
const;
557 const bool& GetRefBool(
int number,
const bool& default_value)
const;
558 const int& GetRefEnum(
int number,
const int& default_value)
const;
563 const float& GetRefRepeatedFloat(
int number,
int index)
const;
564 const double& GetRefRepeatedDouble(
int number,
int index)
const;
565 const bool& GetRefRepeatedBool(
int number,
int index)
const;
566 const int& GetRefRepeatedEnum(
int number,
int index)
const;
570 int start_field_number,
int end_field_number,
587 PROTOBUF_NODISCARD
virtual MessageLite* ReleaseMessage(
594 PROTOBUF_DEPRECATED_MSG(
"Please use ByteSizeLong() instead")
596 virtual size_t ByteSizeLong()
const = 0;
597 virtual size_t SpaceUsedLong()
const = 0;
602 virtual void Clear() = 0;
604 virtual bool ReadMessage(
const MessageLite& prototype,
608 virtual uint8_t* WriteMessageToArray(
613 virtual void UnusedKeyMethod();
671 mutable int cached_size;
679 uint8_t* InternalSerializeFieldWithCachedSizesToArray(
682 uint8_t* InternalSerializeMessageSetItemWithCachedSizesToArray(
690 size_t SpaceUsedExcludingSelfLong()
const;
704 struct FirstComparator {
706 return lhs.first < rhs.first;
709 return lhs.first <
key;
712 return key < rhs.first;
732 std::pair<Extension*, bool>
Insert(
int key);
736 void GrowCapacity(
size_t minimum_new_capacity);
737 static constexpr
uint16_t kMaximumFlatCapacity = 256;
744 return PROTOBUF_PREDICT_FALSE(is_large()) ? map_.large->size() : flat_size_;
750 template <
typename Iterator,
typename KeyValueFunctor>
752 KeyValueFunctor
func) {
758 template <
typename KeyValueFunctor>
760 if (PROTOBUF_PREDICT_FALSE(is_large())) {
767 template <
typename KeyValueFunctor>
769 if (PROTOBUF_PREDICT_FALSE(is_large())) {
777 const Extension& other_extension,
786 bool* was_packed_on_wire);
792 bool FindExtensionInfoFromFieldNumber(
int wire_type,
int field_number,
795 bool* was_packed_on_wire)
const;
806 bool ParseFieldWithExtensionInfo(
int field_number,
bool was_packed_on_wire,
813 bool ParseFieldMaybeLazily(
int wire_type,
int field_number,
819 bool HasLazy(
int number)
const;
845 return FindExtensionInfoFromFieldNumber(wire_type,
field, &finder,
864 const char* ParseMessageSetItem(
const char*
ptr,
const MessageLite* extendee,
867 const char* ParseMessageSetItem(
const char*
ptr,
const Message* extendee,
872 template <
typename T>
873 const char* ParseFieldWithExtensionInfo(
int number,
bool was_packed_on_wire,
878 template <
typename Msg,
typename T>
879 const char* ParseMessageSetItemTmpl(
const char*
ptr,
const Msg* extendee,
890 static inline size_t RepeatedMessage_SpaceUsedExcludingSelfLong(
903 return map_.flat + flat_size_;
907 return map_.flat + flat_size_;
925 static void DeleteFlatMap(
const KeyValue* flat,
uint16_t flat_capacity);
931 :
arena_(nullptr), flat_capacity_(0), flat_size_(0), map_{
nullptr} {}
1011 template <
typename Type>
1012 class PrimitiveTypeTraits {
1025 template <
typename ExtendeeT>
1028 type,
false, is_packed);
1032 template <
typename Type>
1033 class RepeatedPrimitiveTypeTraits {
1058 template <
typename ExtendeeT>
1061 type,
true, is_packed);
1065 class PROTOBUF_EXPORT RepeatedPrimitiveDefaults {
1067 template <
typename Type>
1079 #define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD) \
1081 inline TYPE PrimitiveTypeTraits<TYPE>::Get( \
1082 int number, const ExtensionSet& set, TYPE default_value) { \
1083 return set.Get##METHOD(number, default_value); \
1086 inline const TYPE* PrimitiveTypeTraits<TYPE>::GetPtr( \
1087 int number, const ExtensionSet& set, const TYPE& default_value) { \
1088 return &set.GetRef##METHOD(number, default_value); \
1091 inline void PrimitiveTypeTraits<TYPE>::Set(int number, FieldType field_type, \
1092 TYPE value, ExtensionSet* set) { \
1093 set->Set##METHOD(number, field_type, value, nullptr); \
1097 inline TYPE RepeatedPrimitiveTypeTraits<TYPE>::Get( \
1098 int number, const ExtensionSet& set, int index) { \
1099 return set.GetRepeated##METHOD(number, index); \
1102 inline const TYPE* RepeatedPrimitiveTypeTraits<TYPE>::GetPtr( \
1103 int number, const ExtensionSet& set, int index) { \
1104 return &set.GetRefRepeated##METHOD(number, index); \
1107 inline void RepeatedPrimitiveTypeTraits<TYPE>::Set( \
1108 int number, int index, TYPE value, ExtensionSet* set) { \
1109 set->SetRepeated##METHOD(number, index, value); \
1112 inline void RepeatedPrimitiveTypeTraits<TYPE>::Add( \
1113 int number, FieldType field_type, bool is_packed, TYPE value, \
1114 ExtensionSet* set) { \
1115 set->Add##METHOD(number, field_type, is_packed, value, nullptr); \
1118 inline const RepeatedField<TYPE>* \
1119 RepeatedPrimitiveTypeTraits<TYPE>::GetDefaultRepeatedField() { \
1120 return &RepeatedPrimitiveDefaults::default_instance() \
1121 ->default_repeated_field_##TYPE##_; \
1124 inline const RepeatedField<TYPE>& \
1125 RepeatedPrimitiveTypeTraits<TYPE>::GetRepeated(int number, \
1126 const ExtensionSet& set) { \
1127 return *reinterpret_cast<const RepeatedField<TYPE>*>( \
1128 set.GetRawRepeatedField(number, GetDefaultRepeatedField())); \
1131 inline const RepeatedField<TYPE>* \
1132 RepeatedPrimitiveTypeTraits<TYPE>::GetRepeatedPtr(int number, \
1133 const ExtensionSet& set) { \
1134 return &GetRepeated(number, set); \
1137 inline RepeatedField<TYPE>* \
1138 RepeatedPrimitiveTypeTraits<TYPE>::MutableRepeated( \
1139 int number, FieldType field_type, bool is_packed, ExtensionSet* set) { \
1140 return reinterpret_cast<RepeatedField<TYPE>*>( \
1141 set->MutableRawRepeatedField(number, field_type, is_packed, nullptr)); \
1152 #undef PROTOBUF_DEFINE_PRIMITIVE_TYPE
1158 class PROTOBUF_EXPORT StringTypeTraits {
1165 ConstType default_value) {
1166 return set.GetString(
number, default_value);
1169 ConstType default_value) {
1180 template <
typename ExtendeeT>
1183 type,
false, is_packed);
1187 class PROTOBUF_EXPORT RepeatedStringTypeTraits {
1225 set.GetRawRepeatedField(
number, GetDefaultRepeatedField()));
1234 static const RepeatedFieldType* GetDefaultRepeatedField();
1236 template <
typename ExtendeeT>
1239 type,
true, is_packed);
1243 static void InitializeDefaultRepeatedFields();
1244 static void DestroyDefaultRepeatedFields();
1252 template <
typename Type,
bool IsVal
id(
int)>
1253 class EnumTypeTraits {
1261 return static_cast<Type>(
set.GetEnum(
number, default_value));
1265 return reinterpret_cast<const Type*
>(
1266 &
set.GetRefEnum(
number, default_value));
1273 template <
typename ExtendeeT>
1276 type,
false, is_packed, IsValid);
1280 template <
typename Type,
bool IsVal
id(
int)>
1281 class RepeatedEnumTypeTraits {
1294 return reinterpret_cast<const Type*
>(
1338 template <
typename ExtendeeT>
1341 type,
true, is_packed, IsValid);
1351 template <
typename Type>
1352 class MessageTypeTraits {
1360 return static_cast<const Type&
>(
set.GetMessage(
number, default_value));
1369 return static_cast<Type*
>(
set->MutableMessage(
1383 return static_cast<Type*
>(
1389 return static_cast<Type*
>(
1392 template <
typename ExtendeeT>
1401 class RepeatedMessageGenericTypeTraits;
1403 template <
typename Type>
1404 class RepeatedMessageTypeTraits {
1430 return static_cast<Type*
>(
1452 template <
typename ExtendeeT>
1460 template <
typename Type>
1488 class ExtensionIdentifier {
1547 template <
typename ExtendeeType,
typename TypeTraitsType,
1558 #include <google/protobuf/port_undef.inc>
1560 #endif // GOOGLE_PROTOBUF_EXTENSION_SET_H__
static void Set(int number, FieldType field_type, ConstType value, ExtensionSet *set)
static MutableType Mutable(int number, int index, ExtensionSet *set)
const char * ReadTag(const char *p, uint32 *out, uint32 max_tag=0)
RepeatedField< int32_t > default_repeated_field_int32_t_
static void Set(int number, FieldType field_type, const std::string &value, ExtensionSet *set)
static ConstType Get(int number, const ExtensionSet &set, ConstType default_value)
static std::nullptr_t GetRepeatedPtr(int, const ExtensionSet &)
static const RepeatedField< ConstType > * GetRepeatedPtr(int number, const ExtensionSet &set)
void Swap(T &lhs, T &rhs) noexcept(IsNothrowSwappable< T >::value)
const Descriptor::ReservedRange value
KeyValueFunctor ForEach(KeyValueFunctor func) const
ExtensionIdentifier(int number, typename TypeTraits::ConstType default_value)
#define GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeName)
static const RepeatedPtrField< std::string > & GetRepeated(int number, const ExtensionSet &set)
static std::nullptr_t GetPtr(int, const ExtensionSet &, int)
TypeWithSize< 4 >::Int Int32
static void Register(int number, FieldType type, bool is_packed)
const Descriptor::ReservedRange const EnumValueDescriptor const MethodDescriptor extension
const T & Get(const void *ptr)
static void Register(int number, FieldType type, bool is_packed)
static void Register(int number, FieldType type, bool is_packed)
EnumValidityCheck enum_validity_check
RepeatedField< uint64_t > default_repeated_field_uint64_t_
static void Register(int number, FieldType type, bool is_packed)
static const RepeatedFieldType * GetDefaultRepeatedField()
GeneratedExtensionFinder(const MessageLite *extendee)
void SerializeMessageSetWithCachedSizes(const MessageLite *extendee, io::CodedOutputStream *output) const
std::string * MutableType
const typedef Type & ConstType
TypeWithSize< 8 >::UInt UInt64
RepeatedPrimitiveTypeTraits< Type > Repeated
RefCountedPtr< grpc_tls_certificate_provider > instance
static void Set(int number, int index, ConstType value, ExtensionSet *set)
static void UnsafeArenaSetAllocated(int number, FieldType field_type, MutableType message, ExtensionSet *set)
const MessageLite * extendee_
static PROTOBUF_NODISCARD MutableType Release(int number, FieldType, ExtensionSet *set)
static MutableType UnsafeArenaRelease(int number, FieldType, ExtensionSet *set)
RepeatedMessageTypeTraits< Type > Repeated
for_each_detail::ForEach< Reader, Action > ForEach(Reader reader, Action action)
For each item acquired by calling Reader::Next, run the promise Action.
static void Register(int number, FieldType type, bool is_packed)
static const Type & default_instance()
static const RepeatedField< Type > * GetRepeatedPtr(int number, const ExtensionSet &set)
TypeWithSize< 4 >::UInt UInt32
#define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD)
static void Set(int number, FieldType field_type, ConstType value, ExtensionSet *set)
static PyObject * UnknownFieldSet(CMessage *self)
static void Register(int number, FieldType type, bool is_packed)
T * OnShutdownDelete(T *p)
static void Register(int number, FieldType type, bool is_packed)
static const std::string * GetPtr(int number, const ExtensionSet &set, ConstType default_value)
grpc_core::ScopedArenaPtr arena
static const RepeatedFieldType * GetDefaultRepeatedField()
static RepeatedPtrField< Type > * MutableRepeated(int number, FieldType field_type, bool is_packed, ExtensionSet *set)
MessageTypeTraits< Type > Singular
static RepeatedPtrField< std::string > * MutableRepeated(int number, FieldType field_type, bool is_packed, ExtensionSet *set)
RepeatedField< Type > RepeatedFieldType
virtual ~LazyMessageExtension()
static PyObject * AddMessage(RepeatedCompositeContainer *self, PyObject *value)
static const std::string * GetPtr(int number, const ExtensionSet &set, int index)
RepeatedPtrField< Type > RepeatedFieldType
RepeatedField< int64_t > * repeated_int64_t_value
static void Add(int number, FieldType field_type, bool is_packed, ConstType value, ExtensionSet *set)
static const Type * GetPtr(int number, const ExtensionSet &set, int index)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
static const std::string & Get(int number, const ExtensionSet &set, ConstType default_value)
static void * tag(intptr_t t)
static void Add(int number, FieldType field_type, bool is_packed, Type value, ExtensionSet *set)
static void RegisterEnumExtension(const MessageLite *containing_type, int number, FieldType type, bool is_repeated, bool is_packed, EnumValidityFunc *is_valid)
WireFormatLite::FieldType field_type(FieldType type)
static const std::string & Get(int number, const ExtensionSet &set, int index)
std::string * MutableRepeatedString(int number, int index)
static const RepeatedField< ConstType > & GetRepeated(int number, const ExtensionSet &set)
int ToIntSize(size_t size)
static KeyValueFunctor ForEach(Iterator begin, Iterator end, KeyValueFunctor func)
#define GOOGLE_PROTOBUF_PARSER_ASSERT(predicate)
GRPC_CUSTOM_MESSAGELITE MessageLite
StringTypeTraits Singular
static const RepeatedPtrField< std::string > * GetRepeatedPtr(int number, const ExtensionSet &set)
FloatingPoint< float > Float
void SetString(int number, FieldType type, std::string value, desc)
const FieldDescriptor * descriptor
unsigned __int64 uint64_t
RepeatedField< int32_t > * repeated_int32_t_value
GRPC_CUSTOM_CODEDINPUTSTREAM CodedInputStream
static std::nullptr_t GetPtr(int, const ExtensionSet &, ConstType)
RepeatedStringTypeTraits Repeated
static std::string * Mutable(int number, FieldType field_type, ExtensionSet *set)
RepeatedField< uint64_t > * repeated_uint64_t_value
EnumValidityFuncWithArg * func
void LinkExtensionReflection(const google::protobuf::internal::ExtensionIdentifier< ExtendeeType, TypeTraitsType, field_type, is_packed > &extension)
bool operator()(int key, const KeyValue &rhs) const
PROTOBUF_ATTRIBUTE_WEAK ExtensionSet::LazyMessageExtension * MaybeCreateLazyExtension(Arena *arena)
static void RegisterExtension(const MessageLite *containing_type, int number, FieldType type, bool is_repeated, bool is_packed)
GRPC_CUSTOM_CODEDOUTPUTSTREAM CodedOutputStream
static const RepeatedFieldType * GetDefaultRepeatedField()
EnumTypeTraits< Type, IsValid > Singular
static ConstType Get(int number, const ExtensionSet &set, int index)
std::string * MutableType
TypeTraits::ConstType default_value() const
RepeatedField< uint32_t > * repeated_uint32_t_value
static ConstType Get(int number, const ExtensionSet &set, ConstType default_value)
const char * ParseMessageSet(const char *ptr, const Msg *extendee, InternalMetadata *metadata, internal::ParseContext *ctx)
const typedef Type & ConstType
std::map< int, Extension > LargeMap
static ConstType Get(int number, const ExtensionSet &set, int index)
constexpr ExtensionInfo()
static const ConstType * GetPtr(int number, const ExtensionSet &set, const ConstType &default_value)
static std::string * Add(int number, FieldType field_type, ExtensionSet *set)
static std::string * Mutable(int number, int index, ExtensionSet *set)
static ConstType Get(int number, const ExtensionSet &set, ConstType default_value)
static bool GetString(std::string *out, CBS *cbs)
static MutableType Add(int number, FieldType field_type, ExtensionSet *set)
const FieldDescriptor * field
static const ConstType * GetPtr(int number, const ExtensionSet &set, int index)
static void Add(int number, FieldType field_type, bool, const std::string &value, ExtensionSet *set)
static MutableType Mutable(int number, FieldType field_type, ExtensionSet *set)
void SetRepeatedString(int number, int index, std::string value)
static Type Get(int number, const ExtensionSet &set, int index)
static void Register(int number, FieldType type, bool is_packed)
constexpr size_t Find(Needle, Needle, Ts...)
bool FindExtension(int wire_type, uint32_t field, const MessageLite *extendee, const internal::ParseContext *, ExtensionInfo *extension, bool *was_packed_on_wire)
bool operator()(const KeyValue &lhs, const KeyValue &rhs) const
static RepeatedField< Type > * MutableRepeated(int number, FieldType field_type, bool is_packed, ExtensionSet *set)
bool EnumValidityFunc(int number)
RepeatedEnumTypeTraits< Type, IsValid > Repeated
FloatingPoint< double > Double
zend_class_entry * field_type
static void Set(int number, int index, Type value, ExtensionSet *set)
RepeatedField< int64_t > default_repeated_field_int64_t_
static void RegisterMessageExtension(const MessageLite *containing_type, int number, FieldType type, bool is_repeated, bool is_packed, const MessageLite *prototype)
RepeatedPtrField< std::string > RepeatedFieldType
const KeyValue * flat_begin() const
static void Register(int number)
TypeTraits::ConstType const & default_value_ref() const
EnumDescriptorProto * AddEnum(FileDescriptorProto *file, const std::string &name)
const MessageLite * prototype
void StrongReference(const T &var)
TypeTraitsType TypeTraits
static const RepeatedPtrField< Type > & GetRepeated(int number, const ExtensionSet &set)
InternalDescriptorPool * pool
std::string * MutableString(int number, FieldType type, desc)
TypeTraits::ConstType default_value_
static const ConstType * GetPtr(int number, const ExtensionSet &set, const ConstType &default_value)
~GeneratedExtensionFinder() override
uint8_t * _InternalSerialize(const MessageLite *extendee, int start_field_number, int end_field_number, uint8_t *target, io::EpsCopyOutputStream *stream) const
constexpr ExtensionInfo(const MessageLite *extendee, int param_number, FieldType type_param, bool isrepeated, bool ispacked)
TypeWithSize< 8 >::Int Int64
static PyObject * Insert(PyObject *pself, PyObject *args)
static const RepeatedField< Type > & GetRepeated(int number, const ExtensionSet &set)
bool operator()(const KeyValue &lhs, int key) const
PrimitiveTypeTraits< Type > Singular
static void Set(int number, int index, const std::string &value, ExtensionSet *set)
void AddString(int number, FieldType type, std::string value, desc)
static void SetAllocated(int number, FieldType field_type, MutableType message, ExtensionSet *set)
static const char descriptor[1336]
KeyValueFunctor ForEach(KeyValueFunctor func)
const Collection::value_type::second_type * FindOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
RepeatedField< Type > RepeatedFieldType
static RepeatedField< Type > * MutableRepeated(int number, FieldType field_type, bool is_packed, ExtensionSet *set)
RepeatedField< uint32_t > default_repeated_field_uint32_t_
const KeyValue * flat_end() const
bool EnumValidityFuncWithArg(const void *arg, int number)
void SerializeWithCachedSizes(const MessageLite *extendee, int start_field_number, int end_field_number, io::CodedOutputStream *output) const
const char * ParseFieldMaybeLazily(uint64_t tag, const char *ptr, const MessageLite *extendee, internal::InternalMetadata *metadata, internal::ParseContext *ctx)
const MessageLite * message
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:21