generated_message_table_driven.h
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 #ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__
32 #define GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__
33 
34 #include <google/protobuf/map.h>
39 
40 // We require C++11 and Clang to use constexpr for variables, as GCC 4.8
41 // requires constexpr to be consistent between declarations of variables
42 // unnecessarily (see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58541).
43 // VS 2017 Update 3 also supports this usage of constexpr.
44 #if defined(__clang__) || (defined(_MSC_VER) && _MSC_VER >= 1911)
45 #define PROTOBUF_CONSTEXPR_VAR constexpr
46 #else // !__clang__
47 #define PROTOBUF_CONSTEXPR_VAR
48 #endif // !_clang
49 
50 #ifdef SWIG
51 #error "You cannot SWIG proto headers"
52 #endif
53 
54 #include <google/protobuf/port_def.inc>
55 
56 namespace google {
57 namespace protobuf {
58 namespace internal {
59 
60 // Processing-type masks.
61 static constexpr const unsigned char kOneofMask = 0x40;
62 static constexpr const unsigned char kRepeatedMask = 0x20;
63 // Mask for the raw type: either a WireFormatLite::FieldType or one of the
64 // ProcessingTypes below, without the oneof or repeated flag.
65 static constexpr const unsigned char kTypeMask = 0x1f;
66 
67 // Wire type masks.
68 static constexpr const unsigned char kNotPackedMask = 0x10;
69 static constexpr const unsigned char kInvalidMask = 0x20;
70 
78  TYPE_MAP = 25,
79 };
80 
81 static_assert(TYPE_MAP < kRepeatedMask, "Invalid enum");
82 
83 struct PROTOBUF_EXPORT FieldMetadata {
84  uint32 offset; // offset of this field in the struct
85  uint32 tag; // field * 8 + wire_type
86  // byte offset * 8 + bit_offset;
87  // if the high bit is set then this is the byte offset of the oneof_case
88  // for this field.
90  uint32 type; // the type of this field.
91  const void* ptr; // auxiliary data
92 
93  // From the serializer point of view each fundamental type can occur in
94  // 4 different ways. For simplicity we treat all combinations as a cartesion
95  // product although not all combinations are allowed.
102  kNumTypeClasses // must be last enum
103  };
104  // C++ protobuf has 20 fundamental types, were we added Cord and StringPiece
105  // and also distinquish the same types if they have different wire format.
106  enum {
107  kCordType = 19,
108  kStringPieceType = 20,
109  kInlinedType = 21,
110  kNumTypes = 21,
111  kSpecial = kNumTypes * kNumTypeClasses,
112  };
113 
114  static int CalculateType(int fundamental_type, FieldTypeClass type_class);
115 };
116 
117 // TODO(ckennelly): Add a static assertion to ensure that these masks do not
118 // conflict with wiretypes.
119 
120 // ParseTableField is kept small to help simplify instructions for computing
121 // offsets, as we will always need this information to parse a field.
122 // Additional data, needed for some types, is stored in
123 // AuxillaryParseTableField.
126  // The presence_index ordinarily represents a has_bit index, but for fields
127  // inside a oneof it represents the index in _oneof_case_.
129  unsigned char normal_wiretype;
130  unsigned char packed_wiretype;
131 
132  // processing_type is given by:
133  // (FieldDescriptor->type() << 1) | FieldDescriptor->is_packed()
134  unsigned char processing_type;
135 
136  unsigned char tag_size;
137 };
138 
139 struct ParseTable;
140 
142  typedef bool (*EnumValidator)(int);
143 
144  // Enums
145  struct enum_aux {
147  };
149  // Group, messages
150  struct message_aux {
151  // ExplicitlyInitialized<T> -> T requires a reinterpret_cast, which prevents
152  // the tables from being constructed as a constexpr. We use void to avoid
153  // the cast.
154  const void* default_message_void;
155  const MessageLite* default_message() const {
156  return static_cast<const MessageLite*>(default_message_void);
157  }
158  };
160  // Strings
161  struct string_aux {
162  const void* default_ptr;
163  const char* field_name;
164  };
166 
167  struct map_aux {
168  bool (*parse_map)(io::CodedInputStream*, void*);
169  };
171 
172  AuxillaryParseTableField() = default;
174  : enums(e) {}
176  : messages(m) {}
178  : strings(s) {}
180  : maps(m) {}
181 };
182 
183 struct ParseTable {
187  // TODO(ckennelly): Do something with this padding.
188 
189  // TODO(ckennelly): Vet these for sign extension.
194 
195  // ExplicitlyInitialized<T> -> T requires a reinterpret_cast, which prevents
196  // the tables from being constructed as a constexpr. We use void to avoid
197  // the cast.
199  const MessageLite* default_instance() const {
200  return static_cast<const MessageLite*>(default_instance_void);
201  }
202 
204 };
205 
206 static_assert(sizeof(ParseTableField) <= 16, "ParseTableField is too large");
207 // The tables must be composed of POD components to ensure link-time
208 // initialization.
209 static_assert(std::is_pod<ParseTableField>::value, "");
214 static_assert(std::is_pod<ParseTable>::value, "");
215 
216 // TODO(ckennelly): Consolidate these implementations into a single one, using
217 // dynamic dispatch to the appropriate unknown field handler.
222 
223 template <typename Entry>
224 bool ParseMap(io::CodedInputStream* input, void* map_field) {
225  typedef typename MapEntryToMapField<Entry>::MapFieldType MapFieldType;
227  MapType;
228  typedef typename Entry::template Parser<MapFieldType, MapType> ParserType;
229 
230  ParserType parser(static_cast<MapFieldType*>(map_field));
232 }
233 
237 };
238 
239 PROTOBUF_EXPORT void SerializeInternal(const uint8* base,
240  const FieldMetadata* table,
241  int32 num_fields,
243 
244 inline void TableSerialize(const MessageLite& msg,
245  const SerializationTable* table,
247  const FieldMetadata* field_table = table->field_table;
248  int num_fields = table->num_fields - 1;
249  const uint8* base = reinterpret_cast<const uint8*>(&msg);
250  // TODO(gerbens) This skips the first test if we could use the fast
251  // array serialization path, we should make this
252  // int cached_size =
253  // *reinterpret_cast<const int32*>(base + field_table->offset);
254  // SerializeWithCachedSize(msg, field_table + 1, num_fields, cached_size, ...)
255  // But we keep conformance with the old way for now.
256  SerializeInternal(base, field_table + 1, num_fields, output);
257 }
258 
259 uint8* SerializeInternalToArray(const uint8* base, const FieldMetadata* table,
260  int32 num_fields, bool is_deterministic,
261  uint8* buffer);
262 
264  const SerializationTable* table,
265  bool is_deterministic, uint8* buffer) {
266  const uint8* base = reinterpret_cast<const uint8*>(&msg);
267  const FieldMetadata* field_table = table->field_table + 1;
268  int num_fields = table->num_fields - 1;
269  return SerializeInternalToArray(base, field_table, num_fields,
270  is_deterministic, buffer);
271 }
272 
273 template <typename T>
275  bool operator()(const T& a, const T& b) const { return a < b; }
276 };
277 
278 template <>
280  bool operator()(const ArenaStringPtr& a, const ArenaStringPtr& b) const {
281  return a.Get() < b.Get();
282  }
283 };
284 
286  template <typename T>
288  const MapEntryHelper<T>& b) const {
289  return Compare(a.key_, b.key_);
290  }
291  template <typename T>
292  bool Compare(const T& a, const T& b) const {
293  return CompareHelper<T>()(a, b);
294  }
295 };
296 
297 template <typename MapFieldType, const SerializationTable* table>
299  uint32 has_offset, io::CodedOutputStream* output) {
301  typedef typename MapFieldType::MapType::const_iterator Iter;
302 
303  const MapFieldType& map_field =
304  *reinterpret_cast<const MapFieldType*>(base + offset);
305  const SerializationTable* t =
306  table +
307  has_offset; // has_offset is overloaded for maps to mean table offset
308  if (!output->IsSerializationDeterministic()) {
309  for (Iter it = map_field.GetMap().begin(); it != map_field.GetMap().end();
310  ++it) {
311  Entry map_entry(*it);
312  output->WriteVarint32(tag);
313  output->WriteVarint32(map_entry._cached_size_);
314  SerializeInternal(reinterpret_cast<const uint8*>(&map_entry),
315  t->field_table, t->num_fields, output);
316  }
317  } else {
318  std::vector<Entry> v;
319  for (Iter it = map_field.GetMap().begin(); it != map_field.GetMap().end();
320  ++it) {
321  v.push_back(Entry(*it));
322  }
323  std::sort(v.begin(), v.end(), CompareMapKey());
324  for (int i = 0; i < v.size(); i++) {
325  output->WriteVarint32(tag);
326  output->WriteVarint32(v[i]._cached_size_);
327  SerializeInternal(reinterpret_cast<const uint8*>(&v[i]), t->field_table,
328  t->num_fields, output);
329  }
330  }
331 }
332 
333 } // namespace internal
334 } // namespace protobuf
335 } // namespace google
336 
337 #include <google/protobuf/port_undef.inc>
338 
339 #endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__
google::protobuf.internal::AuxillaryParseTableField::string_aux
Definition: generated_message_table_driven.h:161
table
upb_strtable table
Definition: php/ext/google/protobuf/protobuf.h:1065
google::protobuf.internal::ParseMap
bool ParseMap(io::CodedInputStream *input, void *map_field)
Definition: generated_message_table_driven.h:224
google::protobuf.internal::ParseTable::default_instance
const MessageLite * default_instance() const
Definition: generated_message_table_driven.h:199
google::protobuf.internal::CompareHelper< ArenaStringPtr >::operator()
bool operator()(const ArenaStringPtr &a, const ArenaStringPtr &b) const
Definition: generated_message_table_driven.h:280
google::protobuf.internal::MapFieldSerializer
void MapFieldSerializer(const uint8 *base, uint32 offset, uint32 tag, uint32 has_offset, io::CodedOutputStream *output)
Definition: generated_message_table_driven.h:298
google::protobuf.internal::ParseTable::extension_offset
int64 extension_offset
Definition: generated_message_table_driven.h:192
google::protobuf.internal::ParseTableField::presence_index
uint32 presence_index
Definition: generated_message_table_driven.h:128
google::protobuf.internal::SerializeInternalToArray
uint8 * SerializeInternalToArray(const uint8 *base, const FieldMetadata *table, int32 num_fields, bool is_deterministic, uint8 *buffer)
Definition: generated_message_util.cc:676
wire_format_lite.h
google::protobuf.internal::FieldMetadata::FieldTypeClass
FieldTypeClass
Definition: generated_message_table_driven.h:96
google::protobuf::int64
int64_t int64
Definition: protobuf/src/google/protobuf/stubs/port.h:151
google::protobuf.internal::AuxillaryParseTableField::enum_aux::validator
EnumValidator validator
Definition: generated_message_table_driven.h:146
google::protobuf.internal::SerializationTable::field_table
const FieldMetadata * field_table
Definition: generated_message_table_driven.h:236
input
std::string input
Definition: tokenizer_unittest.cc:197
google::protobuf.internal::kInvalidMask
static constexpr const unsigned char kInvalidMask
Definition: generated_message_table_driven.h:69
base
Definition: logging.cc:2162
google::protobuf::uint8
uint8_t uint8
Definition: protobuf/src/google/protobuf/stubs/port.h:153
google::protobuf.internal::ParseTable::arena_offset
int64 arena_offset
Definition: generated_message_table_driven.h:193
s
XmlRpcServer s
google::protobuf.internal::FieldMetadata::has_offset
uint32 has_offset
Definition: generated_message_table_driven.h:89
google::protobuf::python::descriptor::Iter
static PyObject * Iter(PyContainer *self)
Definition: descriptor_containers.cc:534
google::protobuf.internal::AuxillaryParseTableField::enum_aux
Definition: generated_message_table_driven.h:145
google::protobuf::uint32
uint32_t uint32
Definition: protobuf/src/google/protobuf/stubs/port.h:155
strings
GLsizei const GLchar *const * strings
Definition: glcorearb.h:4046
google::protobuf.internal::ParseTableField::tag_size
unsigned char tag_size
Definition: generated_message_table_driven.h:136
google::protobuf.internal::AuxillaryParseTableField::AuxillaryParseTableField
constexpr AuxillaryParseTableField(AuxillaryParseTableField::map_aux m)
Definition: generated_message_table_driven.h:179
google::protobuf.internal::CompareHelper
Definition: generated_message_table_driven.h:274
google::protobuf.internal::ParseTableField::offset
uint32 offset
Definition: generated_message_table_driven.h:125
google::protobuf.internal::AuxillaryParseTableField::message_aux
Definition: generated_message_table_driven.h:150
google::protobuf.internal::SerializeInternal
PROTOBUF_EXPORT void SerializeInternal(const uint8 *base, const FieldMetadata *table, int32 num_fields, io::CodedOutputStream *output)
Definition: generated_message_util.cc:634
google::protobuf.internal::TYPE_STRING_INLINED
@ TYPE_STRING_INLINED
Definition: generated_message_table_driven.h:76
google::protobuf::MessageLite
Definition: message_lite.h:183
google::protobuf.internal::TYPE_STRING_STRING_PIECE
@ TYPE_STRING_STRING_PIECE
Definition: generated_message_table_driven.h:73
google::protobuf.internal::MergePartialFromCodedStreamLite
bool MergePartialFromCodedStreamLite(MessageLite *msg, const ParseTable &table, io::CodedInputStream *input)
Definition: generated_message_table_driven_lite.cc:98
T
#define T(upbtypeconst, upbtype, ctype, default_value)
google::protobuf.internal::FieldMetadata::offset
uint32 offset
Definition: generated_message_table_driven.h:84
google::protobuf.internal::AuxillaryParseTableField::enums
enum_aux enums
Definition: generated_message_table_driven.h:148
google::protobuf.internal::CompareHelper::operator()
bool operator()(const T &a, const T &b) const
Definition: generated_message_table_driven.h:275
google::protobuf.internal::WireFormatLite::ReadMessageNoVirtual
static bool ReadMessageNoVirtual(io::CodedInputStream *input, MessageType *value)
Definition: wire_format_lite.h:340
google::protobuf.internal::AuxillaryParseTableField::message_aux::default_message
const MessageLite * default_message() const
Definition: generated_message_table_driven.h:155
google::protobuf.internal::ParseTableField::processing_type
unsigned char processing_type
Definition: generated_message_table_driven.h:134
b
GLboolean GLboolean GLboolean b
Definition: glcorearb.h:3228
google::protobuf.internal::kTypeMask
static constexpr const unsigned char kTypeMask
Definition: generated_message_table_driven.h:65
google::protobuf.internal::ParseTableField
Definition: generated_message_table_driven.h:124
google::protobuf.internal::TYPE_BYTES_INLINED
@ TYPE_BYTES_INLINED
Definition: generated_message_table_driven.h:77
google::protobuf.internal::AuxillaryParseTableField
Definition: generated_message_table_driven.h:141
google::protobuf.internal::AuxillaryParseTableField::string_aux::field_name
const char * field_name
Definition: generated_message_table_driven.h:163
google::protobuf::int32
int32_t int32
Definition: protobuf/src/google/protobuf/stubs/port.h:150
google::protobuf.internal::FieldMetadata::kPacked
@ kPacked
Definition: generated_message_table_driven.h:100
google::protobuf.internal::TYPE_BYTES_CORD
@ TYPE_BYTES_CORD
Definition: generated_message_table_driven.h:74
google::protobuf.internal::AuxillaryParseTableField::AuxillaryParseTableField
constexpr AuxillaryParseTableField(AuxillaryParseTableField::message_aux m)
Definition: generated_message_table_driven.h:175
google::protobuf.internal::TYPE_STRING_CORD
@ TYPE_STRING_CORD
Definition: generated_message_table_driven.h:72
google::protobuf.internal::MergePartialFromCodedStream
bool MergePartialFromCodedStream(MessageLite *msg, const ParseTable &table, io::CodedInputStream *input)
Definition: generated_message_table_driven.cc:96
google::protobuf.internal::ParseTable::aux
const AuxillaryParseTableField * aux
Definition: generated_message_table_driven.h:185
google::protobuf.internal::TableSerializeToArray
uint8 * TableSerializeToArray(const MessageLite &msg, const SerializationTable *table, bool is_deterministic, uint8 *buffer)
Definition: generated_message_table_driven.h:263
map_entry_lite.h
google::protobuf.internal::CompareMapKey
Definition: generated_message_table_driven.h:285
google::protobuf.internal::kOneofMask
static constexpr const unsigned char kOneofMask
Definition: generated_message_table_driven.h:61
offset
GLintptr offset
Definition: glcorearb.h:2944
google::protobuf.internal::AuxillaryParseTableField::AuxillaryParseTableField
AuxillaryParseTableField()=default
google::protobuf.internal::AuxillaryParseTableField::EnumValidator
bool(* EnumValidator)(int)
Definition: generated_message_table_driven.h:142
google::protobuf.internal::TYPE_BYTES_STRING_PIECE
@ TYPE_BYTES_STRING_PIECE
Definition: generated_message_table_driven.h:75
google::protobuf.internal::FieldMetadata::tag
uint32 tag
Definition: generated_message_table_driven.h:85
google::protobuf.internal::kNotPackedMask
static constexpr const unsigned char kNotPackedMask
Definition: generated_message_table_driven.h:68
google::protobuf.internal::CompareMapKey::operator()
bool operator()(const MapEntryHelper< T > &a, const MapEntryHelper< T > &b) const
Definition: generated_message_table_driven.h:287
google::protobuf.internal::AuxillaryParseTableField::AuxillaryParseTableField
constexpr AuxillaryParseTableField(AuxillaryParseTableField::enum_aux e)
Definition: generated_message_table_driven.h:173
google::protobuf.internal::ProcessingTypes
ProcessingTypes
Definition: generated_message_table_driven.h:71
google::protobuf.internal::FieldMetadata::kOneOf
@ kOneOf
Definition: generated_message_table_driven.h:101
google::protobuf.internal::FieldMetadata::type
uint32 type
Definition: generated_message_table_driven.h:90
google::protobuf.internal::FieldMetadata::ptr
const void * ptr
Definition: generated_message_table_driven.h:91
google::protobuf.internal::ParseTable::oneof_case_offset
int64 oneof_case_offset
Definition: generated_message_table_driven.h:191
google::protobuf.internal::FieldMetadata::kNoPresence
@ kNoPresence
Definition: generated_message_table_driven.h:98
google::protobuf.internal::AuxillaryParseTableField::string_aux::default_ptr
const void * default_ptr
Definition: generated_message_table_driven.h:162
buffer
Definition: buffer_processor.h:43
google::protobuf.internal::MapEntryToMapField
Definition: map_field_lite.h:173
map.h
google::protobuf.internal::ParseTable::has_bits_offset
int64 has_bits_offset
Definition: generated_message_table_driven.h:190
google::protobuf::io::CodedOutputStream
Definition: coded_stream.h:693
google::protobuf.internal::AuxillaryParseTableField::messages
message_aux messages
Definition: generated_message_table_driven.h:159
i
int i
Definition: gmock-matchers_test.cc:764
v
const GLdouble * v
Definition: glcorearb.h:3106
google::protobuf.internal::SerializationTable
Definition: generated_message_table_driven.h:234
google::protobuf.internal::AuxillaryParseTableField::message_aux::default_message_void
const void * default_message_void
Definition: generated_message_table_driven.h:154
google::protobuf.internal::CompareMapKey::Compare
bool Compare(const T &a, const T &b) const
Definition: generated_message_table_driven.h:292
google::protobuf.internal::SerializationTable::num_fields
int num_fields
Definition: generated_message_table_driven.h:235
google::protobuf.internal::AuxillaryParseTableField::AuxillaryParseTableField
constexpr AuxillaryParseTableField(AuxillaryParseTableField::string_aux s)
Definition: generated_message_table_driven.h:177
google::protobuf.internal::ParseTable::default_instance_void
const void * default_instance_void
Definition: generated_message_table_driven.h:198
google::protobuf.internal::ParseTableField::packed_wiretype
unsigned char packed_wiretype
Definition: generated_message_table_driven.h:130
message_lite.h
google::protobuf::io::CodedInputStream
Definition: coded_stream.h:173
google::protobuf.internal::MapEntryHelper
Definition: map_entry_lite.h:691
m
const upb_json_parsermethod * m
Definition: ruby/ext/google/protobuf_c/upb.h:10501
google::protobuf.internal::AuxillaryParseTableField::maps
map_aux maps
Definition: generated_message_table_driven.h:170
google::protobuf.internal::ParseTable
Definition: generated_message_table_driven.h:183
google::protobuf.internal::TableSerialize
void TableSerialize(const MessageLite &msg, const SerializationTable *table, io::CodedOutputStream *output)
Definition: generated_message_table_driven.h:244
google::protobuf.internal::FieldMetadata::kRepeated
@ kRepeated
Definition: generated_message_table_driven.h:99
google::protobuf.internal::ParseTable::unknown_field_set
bool unknown_field_set
Definition: generated_message_table_driven.h:203
google::protobuf.internal::ParseTableField::normal_wiretype
unsigned char normal_wiretype
Definition: generated_message_table_driven.h:129
google::protobuf.internal::ParseTable::fields
const ParseTableField * fields
Definition: generated_message_table_driven.h:184
google::protobuf::Map
Definition: map.h:62
internal
Definition: any.pb.h:40
google::protobuf.internal::ParseTable::max_field_number
int max_field_number
Definition: generated_message_table_driven.h:186
google::protobuf.internal::FieldMetadata::kPresence
@ kPresence
Definition: generated_message_table_driven.h:97
google::protobuf.internal::AuxillaryParseTableField::map_aux
Definition: generated_message_table_driven.h:167
google::protobuf.internal::FieldMetadata
Definition: generated_message_table_driven.h:83
value
GLsizei const GLfloat * value
Definition: glcorearb.h:3093
output
const upb_json_parsermethod const upb_symtab upb_sink * output
Definition: ruby/ext/google/protobuf_c/upb.h:10503
benchmarks.python.py_benchmark.parser
parser
Definition: py_benchmark.py:10
google::protobuf.internal::kRepeatedMask
static constexpr const unsigned char kRepeatedMask
Definition: generated_message_table_driven.h:62
google::protobuf.internal::AuxillaryParseTableField::strings
string_aux strings
Definition: generated_message_table_driven.h:165
google::protobuf.internal::TYPE_MAP
@ TYPE_MAP
Definition: generated_message_table_driven.h:78
google::protobuf.internal::AuxillaryParseTableField::map_aux::parse_map
bool(* parse_map)(io::CodedInputStream *, void *)
Definition: generated_message_table_driven.h:168
a
GLboolean GLboolean GLboolean GLboolean a
Definition: glcorearb.h:3228
it
MapIter it
Definition: php/ext/google/protobuf/map.c:205
google
Definition: data_proto2_to_proto3_util.h:11
google::protobuf.internal::ArenaStringPtr
Definition: arenastring.h:68
map_field_lite.h


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:51