Go to the documentation of this file.
35 #include <google/protobuf/generated_message_util.h>
41 #include <google/protobuf/io/coded_stream.h>
42 #include <google/protobuf/io/zero_copy_stream_impl_lite.h>
43 #include <google/protobuf/arenastring.h>
44 #include <google/protobuf/extension_set.h>
45 #include <google/protobuf/generated_message_table_driven.h>
46 #include <google/protobuf/message_lite.h>
47 #include <google/protobuf/metadata_lite.h>
48 #include <google/protobuf/repeated_field.h>
49 #include <google/protobuf/wire_format_lite.h>
52 #include <google/protobuf/port_def.inc>
54 PROTOBUF_PRAGMA_INIT_SEG
68 PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
69 PROTOBUF_ATTRIBUTE_INIT_PRIORITY ExplicitlyConstructed<std::string>
95 const void*
end = &
str + 1;
100 return str.capacity();
104 template <
typename T>
105 const T&
Get(
const void*
ptr) {
106 return *
static_cast<const T*
>(
ptr);
114 struct PrimitiveTypeHelper;
117 struct PrimitiveTypeHelper<WireFormatLite::TYPE_BOOL> {
215 : PrimitiveTypeHelper<WireFormatLite::TYPE_INT32> {};
218 struct PrimitiveTypeHelper<WireFormatLite::TYPE_SFIXED32>
219 : PrimitiveTypeHelper<WireFormatLite::TYPE_FIXED32> {
254 : PrimitiveTypeHelper<WireFormatLite::TYPE_STRING> {};
258 struct PrimitiveTypeHelper<FieldMetadata::kInlinedType>
259 : PrimitiveTypeHelper<WireFormatLite::TYPE_STRING> {};
264 template <
typename O,
int type>
267 template <
int type,
typename O>
269 OutputHelper<O, type>::Serialize(
ptr,
output);
272 template <
typename O>
274 SerializeTo<WireFormatLite::TYPE_UINT32>(&
tag,
output);
277 template <
typename O>
279 SerializeTo<WireFormatLite::TYPE_UINT32>(&
length,
output);
309 io::ArrayOutputStream array_stream(
output->ptr, INT_MAX);
311 o.SetSerializationDeterministic(
output->is_deterministic);
312 msg->SerializeWithCachedSizes(&o);
318 const FieldMetadata* field_table,
int num_fields,
327 const FieldMetadata* field_table,
int num_fields,
336 template <
typename O>
339 const SerializationTable*
table =
340 static_cast<const SerializationTable*
>(table_ptr);
347 const FieldMetadata* field_table =
table->field_table;
350 *
reinterpret_cast<const int32_t*
>(
base + field_table->offset);
352 int num_fields =
table->num_fields - 1;
358 template <
typename O>
361 const SerializationTable*
table =
362 static_cast<const SerializationTable*
>(table_ptr);
368 const FieldMetadata* field_table =
table->field_table;
371 *
reinterpret_cast<const int32_t*
>(
base + field_table->offset);
372 int num_fields =
table->num_fields - 1;
378 struct SingularFieldHelper {
379 template <
typename O>
388 template <
typename O>
391 SerializeTo<WireFormatLite::TYPE_STRING>(&Get<ArenaStringPtr>(
field).
Get(),
398 : SingularFieldHelper<WireFormatLite::TYPE_STRING> {};
401 struct SingularFieldHelper<WireFormatLite::TYPE_GROUP> {
402 template <
typename O>
413 template <
typename O>
422 struct SingularFieldHelper<FieldMetadata::kInlinedType> {
423 template <
typename O>
426 SerializeTo<FieldMetadata::kInlinedType>(&Get<std::string>(
field),
output);
431 struct RepeatedFieldHelper {
432 template <
typename O>
436 for (
int i = 0;
i <
array.size();
i++) {
444 class AccessorHelper {
448 return x.raw_data()[
idx];
454 template <
typename O>
457 Get<internal::RepeatedPtrFieldBase>(
field);
468 : RepeatedFieldHelper<WireFormatLite::TYPE_STRING> {};
471 struct RepeatedFieldHelper<WireFormatLite::TYPE_GROUP> {
472 template <
typename O>
475 Get<internal::RepeatedPtrFieldBase>(
field);
488 template <
typename O>
491 Get<internal::RepeatedPtrFieldBase>(
field);
503 struct RepeatedFieldHelper<FieldMetadata::kInlinedType>
504 : RepeatedFieldHelper<WireFormatLite::TYPE_STRING> {};
507 struct PackedFieldHelper {
508 template <
typename O>
512 if (
array.empty())
return;
517 for (
int i = 0;
i <
array.size();
i++) {
525 template <
typename O>
535 : PackedFieldHelper<WireFormatLite::TYPE_STRING> {};
537 struct PackedFieldHelper<WireFormatLite::TYPE_GROUP>
538 : PackedFieldHelper<WireFormatLite::TYPE_STRING> {};
540 struct PackedFieldHelper<WireFormatLite::TYPE_MESSAGE>
541 : PackedFieldHelper<WireFormatLite::TYPE_STRING> {};
543 struct PackedFieldHelper<FieldMetadata::kInlinedType>
544 : PackedFieldHelper<WireFormatLite::TYPE_STRING> {};
547 struct OneOfFieldHelper {
548 template <
typename O>
556 struct OneOfFieldHelper<FieldMetadata::kInlinedType> {
557 template <
typename O>
569 #define SERIALIZE_TABLE_OP(type, type_class) \
570 ((type - 1) + static_cast<int>(type_class) * FieldMetadata::kNumTypes)
584 bool IsNull<WireFormatLite::TYPE_STRING>(
const void*
ptr) {
585 return static_cast<const ArenaStringPtr*
>(
ptr)->
Get().size() == 0;
589 bool IsNull<WireFormatLite::TYPE_BYTES>(
const void*
ptr) {
590 return static_cast<const ArenaStringPtr*
>(
ptr)->
Get().size() == 0;
594 bool IsNull<WireFormatLite::TYPE_GROUP>(
const void*
ptr) {
595 return Get<const MessageLite*>(
ptr) ==
nullptr;
599 bool IsNull<WireFormatLite::TYPE_MESSAGE>(
const void*
ptr) {
600 return Get<const MessageLite*>(
ptr) ==
nullptr;
605 bool IsNull<FieldMetadata::kInlinedType>(
const void*
ptr) {
609 #define SERIALIZERS_FOR_TYPE(type) \
610 case SERIALIZE_TABLE_OP(type, FieldMetadata::kPresence): \
611 if (!IsPresent(base, field_metadata.has_offset)) continue; \
612 SingularFieldHelper<type>::Serialize(ptr, field_metadata, output); \
614 case SERIALIZE_TABLE_OP(type, FieldMetadata::kNoPresence): \
615 if (IsNull<type>(ptr)) continue; \
616 SingularFieldHelper<type>::Serialize(ptr, field_metadata, output); \
618 case SERIALIZE_TABLE_OP(type, FieldMetadata::kRepeated): \
619 RepeatedFieldHelper<type>::Serialize(ptr, field_metadata, output); \
621 case SERIALIZE_TABLE_OP(type, FieldMetadata::kPacked): \
622 PackedFieldHelper<type>::Serialize(ptr, field_metadata, output); \
624 case SERIALIZE_TABLE_OP(type, FieldMetadata::kOneOf): \
625 if (!IsOneofPresent(base, field_metadata.has_offset, field_metadata.tag)) \
627 OneOfFieldHelper<type>::Serialize(ptr, field_metadata, output); \
631 const FieldMetadata* field_metadata_table,
634 for (
int i = 0;
i < num_fields;
i++) {
635 const FieldMetadata& field_metadata = field_metadata_table[
i];
637 switch (field_metadata.type) {
661 const_cast<void*
>(field_metadata.ptr));
662 func(
base, field_metadata.offset, field_metadata.tag,
663 field_metadata.has_offset,
output);
673 const FieldMetadata* field_metadata_table,
674 int32_t num_fields,
bool is_deterministic,
676 ArrayOutput array_output = {
buffer, is_deterministic};
677 ArrayOutput*
output = &array_output;
679 for (
int i = 0;
i < num_fields;
i++) {
680 const FieldMetadata& field_metadata = field_metadata_table[
i];
682 switch (field_metadata.type) {
704 io::ArrayOutputStream array_stream(array_output.ptr, INT_MAX);
706 output_stream.SetSerializationDeterministic(is_deterministic);
708 const_cast<void*
>(field_metadata.ptr));
709 func(
base, field_metadata.offset, field_metadata.tag,
710 field_metadata.has_offset, &output_stream);
711 array_output.ptr += output_stream.ByteCount();
718 return array_output.ptr;
720 #undef SERIALIZERS_FOR_TYPE
726 ->SerializeWithCachedSizes(extendee,
tag, has_offset,
output);
733 reinterpret_cast<const InternalMetadata*
>(
ptr +
offset)
748 std::unique_ptr<MessageLite>
tmp(m1->New());
749 tmp->CheckTypeAndMergeFrom(*m1);
751 m1->CheckTypeAndMergeFrom(*m2);
753 m2->CheckTypeAndMergeFrom(*
tmp);
760 Arena* submessage_arena) {
761 GOOGLE_DCHECK(Arena::InternalHelper<MessageLite>::GetOwningArena(submessage) ==
765 if (message_arena !=
nullptr && submessage_arena ==
nullptr) {
766 message_arena->Own(submessage);
770 ret->CheckTypeAndMergeFrom(*submessage);
779 #include <google/protobuf/port_undef.inc>
static int Size(const RepeatedPtrFieldBase &x)
bool IsNull(const void *ptr)
const Descriptor::ReservedRange value
const T & Get(const void *ptr)
static uint8 * WriteStringWithSizeToArray(const std::string &str, uint8 *target)
static void Serialize(const void *ptr, io::CodedOutputStream *output)
static bool InitProtobufDefaultsImpl()
static void Serialize(const void *ptr, ArrayOutput *output)
void SerializeTo(const void *ptr, O *output)
integral_constant< bool, true > true_type
void ExtensionSerializer(const uint8 *ptr, uint32 offset, uint32 tag, uint32 has_offset, io::CodedOutputStream *output)
void GenericSwap(MessageLite *m1, MessageLite *m2)
PROTOBUF_EXPORT void SerializeInternal(const uint8 *base, const FieldMetadata *table, int32 num_fields, io::CodedOutputStream *output)
static void Serialize(const void *field, const FieldMetadata &md, O *output)
#define T(upbtypeconst, upbtype, ctype, default_value)
void WriteLengthTo(uint32 length, O *output)
void SerializeGroupTo(const MessageLite *msg, const void *table_ptr, O *output)
void DestroyString(const void *s)
#define SERIALIZE_TABLE_OP(type, type_class)
static void * tag(intptr_t t)
void SerializeMessageDispatch(const MessageLite &msg, const FieldMetadata *field_table, int num_fields, int32 cached_size, io::CodedOutputStream *output)
void InitProtobufDefaultsSlow()
GRPC_CUSTOM_MESSAGELITE MessageLite
unsigned __int64 uint64_t
size_t StringSpaceUsedExcludingSelfLong(const std::string &str)
GRPC_CUSTOM_CODEDOUTPUTSTREAM CodedOutputStream
MessageLite * GetOwnedMessageInternal(Arena *message_arena, MessageLite *submessage, Arena *submessage_arena)
void OnShutdownDestroyString(const std::string *ptr)
MessageLite * DuplicateIfNonNullInternal(MessageLite *message)
static void Serialize(const void *field, const FieldMetadata &md, O *output)
uint8 * SerializeInternalToArray(const uint8 *base, const FieldMetadata *table, int32 num_fields, bool is_deterministic, uint8 *buffer)
void SerializeMessageTo(const MessageLite *msg, const void *table_ptr, O *output)
const FieldDescriptor * field
static void Serialize(const void *field, const FieldMetadata &md, O *output)
void(* SpecialSerializer)(const uint8 *base, uint32 offset, uint32 tag, uint32 has_offset, io::CodedOutputStream *output)
void DestroyMessage(const void *message)
PROTOBUF_CONSTINIT std::atomic< bool > init_protobuf_defaults_state
UniquePtr< SSL_SESSION > ret
static PROTOBUF_ATTRIBUTE_INIT_PRIORITY std::true_type init_empty_string
ExplicitlyConstructed< std::string > fixed_address_empty_string
void WriteTagTo(uint32 tag, O *output)
const PROTOBUF_EXPORT std::string & GetEmptyString()
static void const * Get(const RepeatedPtrFieldBase &x, int idx)
void SerializeNotImplemented(int field)
static void Serialize(const void *field, const FieldMetadata &md, O *output)
#define GOOGLE_LOG(LEVEL)
void SerializeMessageNoTable(const MessageLite *msg, io::CodedOutputStream *output)
void UnknownFieldSerializerLite(const uint8 *ptr, uint32 offset, uint32 tag, uint32 has_offset, io::CodedOutputStream *output)
#define SERIALIZERS_FOR_TYPE(type)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:26