Go to the documentation of this file.
31 #ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__
32 #define GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__
34 #include <google/protobuf/map.h>
35 #include <google/protobuf/map_entry_lite.h>
36 #include <google/protobuf/map_field_lite.h>
37 #include <google/protobuf/message_lite.h>
38 #include <google/protobuf/wire_format_lite.h>
44 #if defined(__clang__) || (defined(_MSC_VER) && _MSC_VER >= 1911)
45 #define PROTOBUF_CONSTEXPR_VAR constexpr
47 #define PROTOBUF_CONSTEXPR_VAR
51 #error "You cannot SWIG proto headers"
54 #include <google/protobuf/port_def.inc>
65 static constexpr
const unsigned char kTypeMask = 0x1f;
83 struct PROTOBUF_EXPORT FieldMetadata {
108 kStringPieceType = 20,
111 kSpecial = kNumTypes * kNumTypeClasses,
114 static int CalculateType(
int fundamental_type, FieldTypeClass type_class);
124 struct ParseTableField {
184 const ParseTableField*
fields;
206 static_assert(
sizeof(ParseTableField) <= 16,
"ParseTableField is too large");
233 template <
typename Entry>
235 typedef typename MapEntryToMapField<Entry>::MapFieldType MapFieldType;
238 typedef typename Entry::template Parser<MapFieldType, MapType> ParserType;
240 ParserType
parser(
static_cast<MapFieldType*
>(map_field));
244 struct SerializationTable {
250 const FieldMetadata*
table,
255 const SerializationTable*
table,
257 const FieldMetadata* field_table =
table->field_table;
258 int num_fields =
table->num_fields - 1;
270 const FieldMetadata*
table,
272 bool is_deterministic,
276 const SerializationTable*
table,
279 const FieldMetadata* field_table =
table->field_table + 1;
280 int num_fields =
table->num_fields - 1;
282 is_deterministic,
buffer);
285 template <
typename T>
286 struct CompareHelper {
293 return a.Get() <
b.Get();
297 struct CompareMapKey {
298 template <
typename T>
303 template <
typename T>
309 template <
typename MapFieldType, const SerializationTable* table>
312 typedef MapEntryHelper<typename MapFieldType::EntryTypeTrait> Entry;
313 typedef typename MapFieldType::MapType::const_iterator
Iter;
315 const MapFieldType& map_field =
316 *
reinterpret_cast<const MapFieldType*
>(
base +
offset);
317 const SerializationTable* t =
320 if (!
output->IsSerializationDeterministic()) {
321 for (
Iter it = map_field.GetMap().begin();
it != map_field.GetMap().end();
323 Entry map_entry(*
it);
325 output->WriteVarint32(map_entry._cached_size_);
327 t->field_table, t->num_fields,
output);
330 std::vector<Entry>
v;
331 for (
Iter it = map_field.GetMap().begin();
it != map_field.GetMap().end();
333 v.push_back(Entry(*
it));
335 std::sort(
v.begin(),
v.end(), CompareMapKey());
336 for (
int i = 0;
i <
v.size();
i++) {
338 output->WriteVarint32(
v[i]._cached_size_);
349 #include <google/protobuf/port_undef.inc>
351 #endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__
constexpr AuxiliaryParseTableField(AuxiliaryParseTableField::map_aux m)
bool ParseMap(io::CodedInputStream *input, void *map_field)
uint8 * TableSerializeToArray(const MessageLite &msg, const SerializationTable *table, bool is_deterministic, uint8 *buffer)
const MessageLite * default_instance() const
bool operator()(const ArenaStringPtr &a, const ArenaStringPtr &b) const
void MapFieldSerializer(const uint8 *base, uint32 offset, uint32 tag, uint32 has_offset, io::CodedOutputStream *output)
constexpr AuxiliaryParseTableField(AuxiliaryParseTableField::message_aux m)
static constexpr const unsigned char kInvalidMask
const ParseTableField * fields
@ TYPE_STRING_STRING_PIECE
AuxiliaryParseTableField()=default
PROTOBUF_EXPORT void SerializeInternal(const uint8 *base, const FieldMetadata *table, int32 num_fields, io::CodedOutputStream *output)
constexpr AuxiliaryParseTableField(AuxiliaryParseTableField::enum_aux e)
bool MergePartialFromCodedStreamLite(MessageLite *msg, const ParseTable &table, io::CodedInputStream *input)
#define T(upbtypeconst, upbtype, ctype, default_value)
bool operator()(const T &a, const T &b) const
const void * default_instance_void
unsigned char processing_type
static constexpr const unsigned char kTypeMask
def Iter(n, format, sep='')
bool MergePartialFromCodedStream(MessageLite *msg, const ParseTable &table, io::CodedInputStream *input)
static void * tag(intptr_t t)
constexpr AuxiliaryParseTableField(AuxiliaryParseTableField::string_aux s)
static constexpr const unsigned char kOneofMask
const MessageLite * default_message() const
GRPC_CUSTOM_MESSAGELITE MessageLite
static constexpr const unsigned char kNotPackedMask
bool operator()(const MapEntryHelper< T > &a, const MapEntryHelper< T > &b) const
GRPC_CUSTOM_CODEDOUTPUTSTREAM CodedOutputStream
@ TYPE_BYTES_STRING_PIECE
const void * default_message_void
uint8 * SerializeInternalToArray(const uint8 *base, const FieldMetadata *table, int32 num_fields, bool is_deterministic, uint8 *buffer)
int64_t oneof_case_offset
bool Compare(const T &a, const T &b) const
unsigned char packed_wiretype
const AuxiliaryParseTableField * aux
bool(* EnumValidator)(int)
void TableSerialize(const MessageLite &msg, const SerializationTable *table, io::CodedOutputStream *output)
unsigned char normal_wiretype
bool(* parse_map)(io::CodedInputStream *, void *)
static constexpr const unsigned char kRepeatedMask
const FieldMetadata * field_table
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:26