Go to the documentation of this file.
31 #ifndef GOOGLE_PROTOBUF_EXTENSION_SET_INL_H__
32 #define GOOGLE_PROTOBUF_EXTENSION_SET_INL_H__
34 #include <google/protobuf/parse_context.h>
35 #include <google/protobuf/extension_set.h>
36 #include <google/protobuf/metadata_lite.h>
46 if (was_packed_on_wire) {
48 #define HANDLE_TYPE(UPPERCASE, CPP_CAMELCASE) \
49 case WireFormatLite::TYPE_##UPPERCASE: \
50 return internal::Packed##CPP_CAMELCASE##Parser( \
51 MutableRawRepeatedField(number, extension.type, extension.is_packed, \
52 extension.descriptor), \
70 return internal::PackedEnumParserArg<T>(
84 #define HANDLE_VARINT_TYPE(UPPERCASE, CPP_CAMELCASE) \
85 case WireFormatLite::TYPE_##UPPERCASE: { \
87 ptr = VarintParse(ptr, &value); \
88 GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); \
89 if (extension.is_repeated) { \
90 Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, \
91 extension.is_packed, value, extension.descriptor); \
93 Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value, \
94 extension.descriptor); \
103 #undef HANDLE_VARINT_TYPE
104 #define HANDLE_SVARINT_TYPE(UPPERCASE, CPP_CAMELCASE, SIZE) \
105 case WireFormatLite::TYPE_##UPPERCASE: { \
107 ptr = VarintParse(ptr, &val); \
108 GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); \
109 auto value = WireFormatLite::ZigZagDecode##SIZE(val); \
110 if (extension.is_repeated) { \
111 Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, \
112 extension.is_packed, value, extension.descriptor); \
114 Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value, \
115 extension.descriptor); \
121 #undef HANDLE_SVARINT_TYPE
122 #define HANDLE_FIXED_TYPE(UPPERCASE, CPP_CAMELCASE, CPPTYPE) \
123 case WireFormatLite::TYPE_##UPPERCASE: { \
124 auto value = UnalignedLoad<CPPTYPE>(ptr); \
125 ptr += sizeof(CPPTYPE); \
126 if (extension.is_repeated) { \
127 Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, \
128 extension.is_packed, value, extension.descriptor); \
130 Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value, \
131 extension.descriptor); \
141 #undef HANDLE_FIXED_TYPE
204 template <
typename Msg,
typename T>
210 enum class State { kNoTag, kHasType, kHasPayload, kDone };
211 State
state = State::kNoTag;
213 while (!
ctx->Done(&
ptr)) {
219 if (
state == State::kNoTag) {
221 state = State::kHasType;
222 }
else if (
state == State::kHasPayload) {
225 bool was_packed_on_wire;
227 &was_packed_on_wire)) {
249 state = State::kDone;
252 if (
state == State::kHasType) {
256 state = State::kDone;
263 if (
state == State::kNoTag) {
265 state = State::kHasPayload;
270 if (
tag == 0 || (
tag & 7) == 4) {
285 #endif // GOOGLE_PROTOBUF_EXTENSION_SET_INL_H__
const char * ReadTag(const char *p, uint32 *out, uint32 max_tag=0)
const Descriptor::ReservedRange value
const EnumDescriptor * type() const
uint32 ReadSize(const char **pp)
TypeWithSize< 4 >::Int Int32
const Descriptor::ReservedRange const EnumValueDescriptor const MethodDescriptor extension
TypeWithSize< 8 >::UInt UInt64
TypeWithSize< 4 >::UInt UInt32
HANDLE_TYPE(int32, FieldDescriptor::CPPTYPE_INT32, -1)
#define T(upbtypeconst, upbtype, ctype, default_value)
void * MutableRawRepeatedField(int number, FieldType field_type, bool packed, const FieldDescriptor *desc)
const char * ParseBigVarint(const char *p, uint64 *out)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
static void * tag(intptr_t t)
MessageLite * MutableMessage(int number, FieldType type, const MessageLite &prototype, desc)
const char * ParseMessageSetItemTmpl(const char *ptr, const Msg *containing_type, Metadata *metadata, internal::ParseContext *ctx)
#define GOOGLE_PROTOBUF_PARSER_ASSERT(predicate)
const PROTOBUF_MUST_USE_RESULT char * VarintParse(const char *p, T *out)
FloatingPoint< float > Float
void WriteLengthDelimited(uint32 num, StringPiece val, std::string *s)
unsigned __int64 uint64_t
#define HANDLE_VARINT_TYPE(UPPERCASE, CPP_CAMELCASE)
#define HANDLE_SVARINT_TYPE(UPPERCASE, CPP_CAMELCASE, SIZE)
bool FindExtension(int wire_type, uint32 field, const MessageLite *containing_type, const internal::ParseContext *ctx, ExtensionInfo *extension, bool *was_packed_on_wire)
TypeAndValue Fixed64(uint64_t val)
bool ParseFieldWithExtensionInfo(int field_number, bool was_packed_on_wire, const ExtensionInfo &extension, io::CodedInputStream *input, FieldSkipper *field_skipper)
FloatingPoint< double > Double
bool ParseFieldMaybeLazily(int wire_type, int field_number, io::CodedInputStream *input, ExtensionFinder *extension_finder, MessageSetFieldSkipper *field_skipper)
std::string * MutableString(int number, FieldType type, desc)
TypeWithSize< 8 >::Int Int64
#define HANDLE_FIXED_TYPE(UPPERCASE, CPP_CAMELCASE, CPPTYPE)
void WriteVarint(uint64 val, std::string *s)
MessageLite * AddMessage(int number, FieldType type, const MessageLite &prototype, desc)
TypeAndValue Fixed32(uint32_t val)
void AddEnum(int number, FieldType type, bool packed, int value, desc)
const DescriptorPool * pool
#define GOOGLE_LOG(LEVEL)
void AddString(int number, FieldType type, std::string value, desc)
void SetEnum(int number, FieldType type, int value, desc)
bool ParseField(uint32 tag, io::CodedInputStream *input, ExtensionFinder *extension_finder, FieldSkipper *field_skipper)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:21