Go to the documentation of this file.
53 #include <google/protobuf/port_def.inc>
55 #define GOOGLE_PROTOBUF_HAS_ONEOF
64 using google::protobuf::internal::LazyField;
71 using google::protobuf::internal::WrappedMutex;
85 if (
d ==
nullptr)
return false;
105 return reinterpret_cast<To*
>(
reinterpret_cast<char*
>(
message) +
offset);
110 return reinterpret_cast<const To*
>(
reinterpret_cast<const char*
>(
message) +
123 " Method : google::protobuf::Reflection::"
137 "INVALID_CPPTYPE",
"CPPTYPE_INT32",
"CPPTYPE_INT64",
"CPPTYPE_UINT32",
138 "CPPTYPE_UINT64",
"CPPTYPE_DOUBLE",
"CPPTYPE_FLOAT",
"CPPTYPE_BOOL",
139 "CPPTYPE_ENUM",
"CPPTYPE_STRING",
"CPPTYPE_MESSAGE"};
141 static void ReportReflectionUsageTypeError(
145 <<
"Protocol Buffer reflection usage error:\n"
146 " Method : google::protobuf::Reflection::"
155 " Problem : Field is not the right type for this message:\n"
157 << cpptype_names_[expected_type]
163 static void ReportReflectionUsageEnumTypeError(
167 " Method : google::protobuf::Reflection::"
176 " Problem : Enum value did not match field type:\n"
181 <<
value->full_name();
184 #define USAGE_CHECK(CONDITION, METHOD, ERROR_DESCRIPTION) \
186 ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
187 #define USAGE_CHECK_EQ(A, B, METHOD, ERROR_DESCRIPTION) \
188 USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
189 #define USAGE_CHECK_NE(A, B, METHOD, ERROR_DESCRIPTION) \
190 USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
192 #define USAGE_CHECK_TYPE(METHOD, CPPTYPE) \
193 if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
194 ReportReflectionUsageTypeError(descriptor_, field, #METHOD, \
195 FieldDescriptor::CPPTYPE_##CPPTYPE)
197 #define USAGE_CHECK_ENUM_VALUE(METHOD) \
198 if (value->type() != field->enum_type()) \
199 ReportReflectionUsageEnumTypeError(descriptor_, field, #METHOD, value)
201 #define USAGE_CHECK_MESSAGE_TYPE(METHOD) \
202 USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
203 "Field does not match message type.");
204 #define USAGE_CHECK_SINGULAR(METHOD) \
205 USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
206 "Field is repeated; the method requires a singular field.")
207 #define USAGE_CHECK_REPEATED(METHOD) \
208 USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
209 "Field is singular; the method requires a repeated field.")
211 #define USAGE_CHECK_ALL(METHOD, LABEL, CPPTYPE) \
212 USAGE_CHECK_MESSAGE_TYPE(METHOD); \
213 USAGE_CHECK_##LABEL(METHOD); \
214 USAGE_CHECK_TYPE(METHOD, CPPTYPE)
227 message_factory_(factory),
228 last_non_weak_field_index_(-1) {
254 if (
field->is_repeated()) {
255 switch (
field->cpp_type()) {
256 #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
257 case FieldDescriptor::CPPTYPE_##UPPERCASE: \
258 total_size += GetRaw<RepeatedField<LOWERCASE> >(message, field) \
259 .SpaceUsedExcludingSelfLong(); \
273 switch (
field->options().ctype()) {
278 .SpaceUsedExcludingSelfLong();
284 if (IsMapFieldInApi(
field)) {
285 total_size += GetRaw<internal::MapFieldBase>(
message,
field)
286 .SpaceUsedExcludingSelfLong();
301 switch (
field->cpp_type()) {
314 switch (
field->options().ctype()) {
319 &GetField<InlinedStringField>(
message,
field).GetNoArena();
328 &DefaultRaw<ArenaStringPtr>(
field).Get();
332 if (ptr != default_ptr) {
350 if (sub_message !=
nullptr) {
363 if (
field->is_repeated()) {
364 switch (
field->cpp_type()) {
365 #define SWAP_ARRAYS(CPPTYPE, TYPE) \
366 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
367 MutableRaw<RepeatedField<TYPE> >(message1, field) \
368 ->Swap(MutableRaw<RepeatedField<TYPE> >(message2, field)); \
382 switch (
field->options().ctype()) {
385 MutableRaw<RepeatedPtrFieldBase>(message1,
field)
387 MutableRaw<RepeatedPtrFieldBase>(message2,
field));
392 if (IsMapFieldInApi(
field)) {
393 MutableRaw<MapFieldBase>(message1,
field)
394 ->Swap(MutableRaw<MapFieldBase>(message2,
field));
396 MutableRaw<RepeatedPtrFieldBase>(message1,
field)
398 MutableRaw<RepeatedPtrFieldBase>(message2,
field));
406 switch (
field->cpp_type()) {
407 #define SWAP_VALUES(CPPTYPE, TYPE) \
408 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
409 std::swap(*MutableRaw<TYPE>(message1, field), \
410 *MutableRaw<TYPE>(message2, field)); \
425 *MutableRaw<Message*>(message2,
field));
427 Message** sub_msg1 = MutableRaw<Message*>(message1,
field);
428 Message** sub_msg2 = MutableRaw<Message*>(message2,
field);
429 if (*sub_msg1 ==
nullptr && *sub_msg2 ==
nullptr)
break;
430 if (*sub_msg1 && *sub_msg2) {
431 (*sub_msg1)->GetReflection()->Swap(*sub_msg1, *sub_msg2);
434 if (*sub_msg1 ==
nullptr) {
435 *sub_msg1 = (*sub_msg2)->
New(message1->
GetArena());
439 *sub_msg2 = (*sub_msg1)->
New(message2->
GetArena());
447 switch (
field->options().ctype()) {
455 MutableRaw<InlinedStringField>(message1,
field);
457 MutableRaw<InlinedStringField>(message2,
field);
458 string1->
Swap(string2);
463 MutableRaw<ArenaStringPtr>(message1,
field);
465 MutableRaw<ArenaStringPtr>(message2,
field);
467 &DefaultRaw<ArenaStringPtr>(
field).Get();
468 if (arena1 == arena2) {
469 string1->
Swap(string2, default_ptr, arena1);
472 string1->
Set(default_ptr, string2->
Get(), arena1);
473 string2->
Set(default_ptr, temp, arena2);
498 Message* temp_message =
nullptr;
503 if (oneof_case1 > 0) {
507 #define GET_TEMP_VALUE(CPPTYPE, TYPE) \
508 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
509 temp_##TYPE = GetField<TYPE>(*message1, field1); \
520 #undef GET_TEMP_VALUE
526 temp_string =
GetString(*message1, field1);
535 if (oneof_case2 > 0) {
538 #define SET_ONEOF_VALUE1(CPPTYPE, TYPE) \
539 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
540 SetField<TYPE>(message1, field2, GetField<TYPE>(*message2, field2)); \
551 #undef SET_ONEOF_VALUE1
568 if (oneof_case1 > 0) {
570 #define SET_ONEOF_VALUE2(CPPTYPE, TYPE) \
571 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
572 SetField<TYPE>(message2, field1, temp_##TYPE); \
583 #undef SET_ONEOF_VALUE2
589 SetString(message2, field1, temp_string);
601 if (message1 == message2)
return;
605 <<
"First argument to Swap() (of type \""
607 <<
"\") is not compatible with this reflection object (which is for type "
610 <<
"\"). Note that the exact same class is required; not just the same "
613 <<
"Second argument to Swap() (of type \""
615 <<
"\") is not compatible with this reflection object (which is for type "
618 <<
"\"). Note that the exact same class is required; not just the same "
629 Swap(message1, temp);
630 if (
GetArena(message1) ==
nullptr) {
640 int fields_with_has_bits = 0;
643 if (
field->is_repeated() ||
field->containing_oneof()) {
646 fields_with_has_bits++;
649 int has_bits_size = (fields_with_has_bits + 31) / 32;
651 for (
int i = 0;
i < has_bits_size;
i++) {
658 if (
field->containing_oneof())
continue;
662 for (
int i = 0;
i < oneof_decl_count;
i++) {
675 const std::vector<const FieldDescriptor*>&
fields)
const {
676 if (message1 == message2)
return;
680 <<
"First argument to SwapFields() (of type \""
682 <<
"\") is not compatible with this reflection object (which is for type "
685 <<
"\"). Note that the exact same class is required; not just the same "
688 <<
"Second argument to SwapFields() (of type \""
690 <<
"\") is not compatible with this reflection object (which is for type "
693 <<
"\"). Note that the exact same class is required; not just the same "
696 std::set<int> swapped_oneof;
698 const int fields_size =
static_cast<int>(
fields.size());
699 for (
int i = 0;
i < fields_size;
i++) {
701 if (
field->is_extension()) {
705 if (
field->containing_oneof()) {
706 int oneof_index =
field->containing_oneof()->index();
708 if (swapped_oneof.find(oneof_index) != swapped_oneof.end()) {
711 swapped_oneof.insert(oneof_index);
716 if (!
field->is_repeated()) {
733 if (
field->is_extension()) {
736 if (
field->containing_oneof()) {
749 if (
field->is_extension()) {
752 switch (
field->cpp_type()) {
753 #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
754 case FieldDescriptor::CPPTYPE_##UPPERCASE: \
755 return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
769 if (IsMapFieldInApi(
field)) {
772 if (
map.IsRepeatedFieldValid()) {
773 return map.GetRepeatedField().size();
780 return GetRaw<RepeatedPtrFieldBase>(
message,
field).size();
793 if (
field->is_extension()) {
795 }
else if (!
field->is_repeated()) {
796 if (
field->containing_oneof()) {
804 switch (
field->cpp_type()) {
805 #define CLEAR_TYPE(CPPTYPE, TYPE) \
806 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
807 *MutableRaw<TYPE>(message, field) = field->default_value_##TYPE(); \
821 field->default_value_enum()->number();
825 switch (
field->options().ctype()) {
830 &DefaultRaw<InlinedStringField>(
field).GetNoArena();
832 ->SetNoArena(default_ptr, *default_ptr);
837 &DefaultRaw<ArenaStringPtr>(
field).Get();
861 switch (
field->cpp_type()) {
862 #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
863 case FieldDescriptor::CPPTYPE_##UPPERCASE: \
864 MutableRaw<RepeatedField<LOWERCASE> >(message, field)->Clear(); \
878 switch (
field->options().ctype()) {
888 if (IsMapFieldInApi(
field)) {
907 if (
field->is_extension()) {
910 switch (
field->cpp_type()) {
911 #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
912 case FieldDescriptor::CPPTYPE_##UPPERCASE: \
913 MutableRaw<RepeatedField<LOWERCASE> >(message, field)->RemoveLast(); \
927 switch (
field->options().ctype()) {
930 MutableRaw<RepeatedPtrField<std::string> >(
message,
field)
937 if (IsMapFieldInApi(
field)) {
939 ->MutableRepeatedField()
954 if (
field->is_extension()) {
958 if (IsMapFieldInApi(
field)) {
960 ->MutableRepeatedField()
970 int index1,
int index2)
const {
974 if (
field->is_extension()) {
977 switch (
field->cpp_type()) {
978 #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
979 case FieldDescriptor::CPPTYPE_##UPPERCASE: \
980 MutableRaw<RepeatedField<LOWERCASE> >(message, field) \
981 ->SwapElements(index1, index2); \
996 if (IsMapFieldInApi(
field)) {
998 ->MutableRepeatedField()
999 ->SwapElements(index1, index2);
1002 ->SwapElements(index1, index2);
1011 struct FieldNumberSorter {
1018 bool IsIndexInHasBitSet(
const uint32* has_bit_set,
uint32 has_bit_index) {
1020 return ((has_bit_set[has_bit_index / 32] >> (has_bit_index % 32)) &
1021 static_cast<uint32>(1)) != 0;
1030 std::vector<const FieldDescriptor*>*
output)
const {
1041 const uint32*
const has_bits =
1047 if (
field->is_repeated()) {
1053 if (containing_oneof) {
1054 const uint32*
const oneof_case_array = GetConstPointerAtOffset<uint32>(
1057 if (oneof_case_array[containing_oneof->
index()] ==
field->number()) {
1060 }
else if (has_bits) {
1062 if (IsIndexInHasBitSet(has_bits, has_bits_indices[
i])) {
1076 std::sort(
output->begin(),
output->end(), FieldNumberSorter());
1081 #undef DEFINE_PRIMITIVE_ACCESSORS
1082 #define DEFINE_PRIMITIVE_ACCESSORS(TYPENAME, TYPE, PASSTYPE, CPPTYPE) \
1083 PASSTYPE Reflection::Get##TYPENAME(const Message& message, \
1084 const FieldDescriptor* field) const { \
1085 USAGE_CHECK_ALL(Get##TYPENAME, SINGULAR, CPPTYPE); \
1086 if (field->is_extension()) { \
1087 return GetExtensionSet(message).Get##TYPENAME( \
1088 field->number(), field->default_value_##PASSTYPE()); \
1090 return GetField<TYPE>(message, field); \
1094 void Reflection::Set##TYPENAME( \
1095 Message* message, const FieldDescriptor* field, PASSTYPE value) const { \
1096 USAGE_CHECK_ALL(Set##TYPENAME, SINGULAR, CPPTYPE); \
1097 if (field->is_extension()) { \
1098 return MutableExtensionSet(message)->Set##TYPENAME( \
1099 field->number(), field->type(), value, field); \
1101 SetField<TYPE>(message, field, value); \
1105 PASSTYPE Reflection::GetRepeated##TYPENAME( \
1106 const Message& message, const FieldDescriptor* field, int index) const { \
1107 USAGE_CHECK_ALL(GetRepeated##TYPENAME, REPEATED, CPPTYPE); \
1108 if (field->is_extension()) { \
1109 return GetExtensionSet(message).GetRepeated##TYPENAME(field->number(), \
1112 return GetRepeatedField<TYPE>(message, field, index); \
1116 void Reflection::SetRepeated##TYPENAME(Message* message, \
1117 const FieldDescriptor* field, \
1118 int index, PASSTYPE value) const { \
1119 USAGE_CHECK_ALL(SetRepeated##TYPENAME, REPEATED, CPPTYPE); \
1120 if (field->is_extension()) { \
1121 MutableExtensionSet(message)->SetRepeated##TYPENAME(field->number(), \
1124 SetRepeatedField<TYPE>(message, field, index, value); \
1128 void Reflection::Add##TYPENAME( \
1129 Message* message, const FieldDescriptor* field, PASSTYPE value) const { \
1130 USAGE_CHECK_ALL(Add##TYPENAME, REPEATED, CPPTYPE); \
1131 if (field->is_extension()) { \
1132 MutableExtensionSet(message)->Add##TYPENAME( \
1133 field->number(), field->type(), field->options().packed(), value, \
1136 AddField<TYPE>(message, field, value); \
1147 #undef DEFINE_PRIMITIVE_ACCESSORS
1154 if (
field->is_extension()) {
1156 field->default_value_string());
1158 switch (
field->options().ctype()) {
1162 return GetField<InlinedStringField>(
message,
field).GetNoArena();
1175 if (
field->is_extension()) {
1177 field->default_value_string());
1179 switch (
field->options().ctype()) {
1183 return GetField<InlinedStringField>(
message,
field).GetNoArena();
1196 if (
field->is_extension()) {
1200 switch (
field->options().ctype()) {
1205 ->SetNoArena(
nullptr,
value);
1210 &DefaultRaw<ArenaStringPtr>(
field).Get();
1214 ->UnsafeSetDefault(default_ptr);
1230 if (
field->is_extension()) {
1233 switch (
field->options().ctype()) {
1245 if (
field->is_extension()) {
1248 switch (
field->options().ctype()) {
1261 if (
field->is_extension()) {
1265 switch (
field->options().ctype()) {
1278 if (
field->is_extension()) {
1282 switch (
field->options().ctype()) {
1298 return field->enum_type()->FindValueByNumberCreatingIfUnknown(
value);
1306 if (
field->is_extension()) {
1308 field->number(),
field->default_value_enum()->number());
1329 field->enum_type()->FindValueByNumber(
value);
1330 if (value_desc ==
nullptr) {
1341 if (
field->is_extension()) {
1353 return field->enum_type()->FindValueByNumberCreatingIfUnknown(
value);
1362 if (
field->is_extension()) {
1386 field->enum_type()->FindValueByNumber(
value);
1387 if (value_desc ==
nullptr) {
1398 if (
field->is_extension()) {
1420 field->enum_type()->FindValueByNumber(
value);
1421 if (value_desc ==
nullptr) {
1432 if (
field->is_extension()) {
1450 if (
field->is_extension()) {
1452 field->number(),
field->message_type(), factory));
1455 if (result ==
nullptr) {
1456 result = DefaultRaw<const Message*>(
field);
1469 if (
field->is_extension()) {
1477 if (
field->containing_oneof()) {
1480 result_holder = MutableField<Message*>(
message,
field);
1481 const Message* default_message = DefaultRaw<const Message*>(
field);
1482 *result_holder = default_message->
New(
message->GetArena());
1488 if (*result_holder ==
nullptr) {
1489 const Message* default_message = DefaultRaw<const Message*>(
field);
1490 *result_holder = default_message->
New(
message->GetArena());
1492 result = *result_holder;
1502 if (
field->is_extension()) {
1506 if (
field->containing_oneof()) {
1507 if (sub_message ==
nullptr) {
1517 if (sub_message ==
nullptr) {
1524 delete *sub_message_holder;
1526 *sub_message_holder = sub_message;
1535 if (sub_message !=
nullptr &&
1537 if (sub_message->
GetArena() ==
nullptr &&
message->GetArena() !=
nullptr) {
1541 message->GetArena()->Own(sub_message);
1548 sub_message_copy->
CopyFrom(*sub_message);
1563 if (
field->is_extension()) {
1568 if (!(
field->is_repeated() ||
field->containing_oneof())) {
1571 if (
field->containing_oneof()) {
1591 copy_from_arena->
CopyFrom(*released);
1592 released = copy_from_arena;
1602 if (
field->is_extension()) {
1603 return static_cast<const Message&
>(
1606 if (IsMapFieldInApi(
field)) {
1622 if (
field->is_extension()) {
1627 if (IsMapFieldInApi(
field)) {
1629 ->MutableRepeatedField()
1632 return MutableRaw<RepeatedPtrFieldBase>(
message,
field)
1644 if (
field->is_extension()) {
1653 if (IsMapFieldInApi(
field)) {
1655 MutableRaw<MapFieldBase>(
message,
field)->MutableRepeatedField();
1657 repeated = MutableRaw<RepeatedPtrFieldBase>(
message,
field);
1660 if (result ==
nullptr) {
1663 if (repeated->
size() == 0) {
1668 result = prototype->
New(
message->GetArena());
1684 if (
field->is_extension()) {
1688 if (IsMapFieldInApi(
field)) {
1690 MutableRaw<MapFieldBase>(
message,
field)->MutableRepeatedField();
1692 repeated = MutableRaw<RepeatedPtrFieldBase>(
message,
field);
1704 if (
field->cpp_type() != cpptype)
1706 "MutableRawRepeatedField", cpptype);
1707 if (
desc !=
nullptr)
1709 if (
field->is_extension()) {
1714 if (IsMapFieldInApi(
field)) {
1715 return MutableRawNonOneof<MapFieldBase>(
message,
field)
1716 ->MutableRepeatedField();
1728 if (
field->cpp_type() != cpptype)
1733 if (
desc !=
nullptr)
1735 if (
field->is_extension()) {
1745 if (IsMapFieldInApi(
field)) {
1746 return &(GetRawNonOneof<MapFieldBase>(
message,
field).GetRepeatedField());
1755 if (field_number == 0) {
1765 "Field is not a map field.");
1774 "Field is not a map field.");
1775 val->SetType(
field->message_type()->FindFieldByName(
"value")->cpp_type());
1777 ->InsertOrLookupMapValue(
key,
val);
1783 "Field is not a map field.");
1789 USAGE_CHECK(IsMapFieldInApi(
field),
"MapBegin",
"Field is not a map field.");
1797 USAGE_CHECK(IsMapFieldInApi(
field),
"MapEnd",
"Field is not a map field.");
1805 USAGE_CHECK(IsMapFieldInApi(
field),
"MapSize",
"Field is not a map field.");
1833 template <
class Type>
1836 return GetConstRefAtOffset<Type>(
message,
1840 template <
class Type>
1843 return GetPointerAtOffset<Type>(
message,
1847 template <
typename Type>
1851 return DefaultRaw<Type>(
field);
1860 template <
typename Type>
1878 return GetConstRefAtOffset<uint32>(
1884 return GetPointerAtOffset<uint32>(
1889 return GetConstRefAtOffset<ExtensionSet>(
message,
1894 return GetPointerAtOffset<ExtensionSet>(
message,
1904 return GetConstRefAtOffset<InternalMetadataWithArena>(
1910 return GetPointerAtOffset<InternalMetadataWithArena>(
1914 template <
typename Type>
1943 switch (
field->cpp_type()) {
1945 switch (
field->options().ctype()) {
1952 return GetField<ArenaStringPtr>(
message,
field).Get().size() > 0;
2049 if (oneof_case > 0) {
2052 switch (
field->cpp_type()) {
2054 switch (
field->options().ctype()) {
2058 &DefaultRaw<ArenaStringPtr>(
field).Get();
2079 #define HANDLE_TYPE(TYPE, CPPTYPE, CTYPE) \
2081 const RepeatedField<TYPE>& Reflection::GetRepeatedField<TYPE>( \
2082 const Message& message, const FieldDescriptor* field) const { \
2083 return *static_cast<RepeatedField<TYPE>*>(MutableRawRepeatedField( \
2084 const_cast<Message*>(&message), field, CPPTYPE, CTYPE, NULL)); \
2088 RepeatedField<TYPE>* Reflection::MutableRepeatedField<TYPE>( \
2089 Message * message, const FieldDescriptor* field) const { \
2090 return static_cast<RepeatedField<TYPE>*>( \
2091 MutableRawRepeatedField(message, field, CPPTYPE, CTYPE, NULL)); \
2107 bool is_string)
const {
2116 template <
typename Type>
2122 template <
typename Type>
2133 template <
typename Type>
2141 template <
typename Type>
2148 template <
typename Type>
2155 template <
typename Type>
2162 template <
typename Type>
2171 template <
typename Type>
2177 template <
typename Type>
2182 return repeated->
Add();
2197 <<
"The type parameter T in RepeatedFieldRef<T> API doesn't match "
2198 <<
"the actual field type (for enums T should be the generated enum "
2199 <<
"type or int32).";
2203 if (
field->is_extension()) {
2214 "Field is not a map field.");
2221 "Field is not a map field.");
2229 const Message*
const* default_instance,
const uint32* offsets,
2254 const Message*
const* default_instance_data,
2304 struct MetadataOwner {
2308 delete m->reflection;
2319 static MetadataOwner* Instance() {
2325 MetadataOwner() =
default;
2349 AssignDescriptorsHelper helper(
2350 factory,
table->file_level_metadata,
table->file_level_enum_descriptors,
2353 for (
int i = 0;
i < file->message_type_count();
i++) {
2354 helper.AssignMessageDescriptor(file->message_type(
i));
2357 for (
int i = 0;
i < file->enum_type_count();
i++) {
2358 helper.AssignEnumDescriptor(file->enum_type(
i));
2360 if (file->options().cc_generic_services()) {
2361 for (
int i = 0;
i < file->service_count();
i++) {
2362 table->file_level_service_descriptors[
i] = file->service(
i);
2365 MetadataOwner::Instance()->AddArray(
table->file_level_metadata,
2366 helper.GetCurrentMetadataPtr());
2372 for (
int i = 0;
i <
table->num_sccs;
i++) {
2378 for (
int i = 0;
i <
table->num_deps;
i++) {
2393 for (
int i = 0;
i <
size;
i++) {
2412 if (*
table->is_initialized)
return;
2413 *
table->is_initialized =
true;
2414 AddDescriptorsImpl(
table);
2428 if (
metadata->have_unknown_fields()) {
const std::string & full_name() const
#define GET_TEMP_VALUE(CPPTYPE, TYPE)
uint32 GetOneofCaseOffset(const OneofDescriptor *oneof_descriptor) const
const FileDescriptor * FindFileByName(const std::string &name) const
std::string GetString(const Message &message, const FieldDescriptor *field) const
#define GOOGLE_CHECK_EQ(A, B)
void AssignEnumDescriptor(const EnumDescriptor *descriptor)
unsigned long long int UInt64
const std::string & GetStringReference(const Message &message, const FieldDescriptor *field, std::string *scratch) const
void ClearOneofField(Message *message, const FieldDescriptor *field) const
GLuint const GLchar * name
const EnumDescriptor * enum_type() const
#define USAGE_CHECK_REPEATED(METHOD)
bool HasOneofField(const Message &message, const FieldDescriptor *field) const
const Descriptor::ReservedRange value
internal::MapFieldBase * MutableMapData(Message *message, const FieldDescriptor *field) const
void ClearOneof(Message *message, const OneofDescriptor *oneof_descriptor) const
static void InternalRegisterGeneratedFile(const google::protobuf::internal::DescriptorTable *table)
virtual size_t SpaceUsedLong() const
void AssignMessageDescriptor(const Descriptor *descriptor)
Type * MutableField(Message *message, const FieldDescriptor *field) const
int last_non_weak_field_index_
MessageFactory *const message_factory_
void SetRepeatedString(Message *message, const FieldDescriptor *field, int index, const std::string &value) const
void RegisterFileLevelMetadata(const DescriptorTable *table)
#define SET_ONEOF_VALUE1(CPPTYPE, TYPE)
PROTOBUF_EXPORT bool ParseNamedEnum(const EnumDescriptor *descriptor, const std::string &name, int *value)
MessageFactory * factory_
size_t SpaceUsedExcludingSelfLong() const
uint32 GetObjectSize() const
const std::string & full_name() const
const FieldDescriptor * FindExtensionByPrintableName(const Descriptor *extendee, const std::string &printable_name) const
virtual Arena * GetArena() const
bool IsFieldInlined(const FieldDescriptor *field) const
void RemoveLast(int number)
internal::ExtensionSet * MutableExtensionSet(Message *message) const
void SwapBit(Message *message1, Message *message2, const FieldDescriptor *field) const
const void * GetFieldDefault(const FieldDescriptor *field) const
void UnsafeArenaSetAllocatedMessage(Message *message, Message *sub_message, const FieldDescriptor *field) const
const std::string & GetRepeatedStringReference(const Message &message, const FieldDescriptor *field, int index, std::string *scratch) const
void UnsafeArenaAddAllocated(typename TypeHandler::Type *value)
const Reflection * GetReflection() const
static PyObject * Get(PyContainer *self, PyObject *args)
void SetRepeatedEnum(int number, int index, int value)
const internal::ExtensionSet & GetExtensionSet(const Message &message) const
const MigrationSchema * schemas_
void * MutableRawRepeatedString(Message *message, const FieldDescriptor *field, bool is_string) const
virtual void CopyFrom(const Message &from)
static MessageFactory * generated_factory()
const FieldDescriptor * FindFieldByNumber(int number) const
const internal::InternalMetadataWithArena & GetInternalMetadataWithArena(const Message &message) const
void call_once(Args &&... args)
void SetRepeatedEnumValueInternal(Message *message, const FieldDescriptor *field, int index, int value) const
void SetAllocatedMessage(Message *message, Message *sub_message, const FieldDescriptor *field) const
MessageFactory * GetMessageFactory() const
#define CLEAR_TYPE(CPPTYPE, TYPE)
virtual const Message * GetPrototype(const Descriptor *type)=0
const ::std::string & Get() const
bool SupportsUnknownEnumValues() const
int ExtensionSize(int number) const
void InitSCC(SCCInfoBase *scc)
void UnsafeArenaSetAllocatedMessage(int number, FieldType type, const FieldDescriptor *descriptor, MessageLite *message)
const internal::ReflectionSchema schema_
GLsizei const GLchar *const * string
const EnumValueDescriptor * GetRepeatedEnum(const Message &message, const FieldDescriptor *field, int index) const
void SetString(Message *message, const FieldDescriptor *field, const std::string &value) const
const RepeatedField< T > & GetRepeatedField(const Message &, const FieldDescriptor *) const
static PyObject * Add(PyObject *self, PyObject *file_descriptor_proto)
#define GOOGLE_PROTOBUF_LINKER_INITIALIZED
const Message * default_instance_
void Swap(Message *message1, Message *message2) const
const PROTOBUF_EXPORT std::string & NameOfEnum(const EnumDescriptor *descriptor, int value)
const TypeHandler::WeakType & Get(int index) const
bool HasField(const Message &message, const FieldDescriptor *field) const
bool ContainsMapKey(const Message &message, const FieldDescriptor *field, const MapKey &key) const
HANDLE_TYPE(int32, FieldDescriptor::CPPTYPE_INT32, -1)
uint32 GetFieldOffset(const FieldDescriptor *field) const
TypeWithSize< 4 >::Int Int32
void Swap(ExtensionSet *other)
size_t SpaceUsedLong(const Message &message) const
int MapSize(const Message &message, const FieldDescriptor *field) const
const FieldDescriptor * GetOneofFieldDescriptor(const Message &message, const OneofDescriptor *oneof_descriptor) const
void * MutableRawRepeatedField(int number, FieldType field_type, bool packed, const FieldDescriptor *desc)
Element * Mutable(int index)
#define SWAP_VALUES(CPPTYPE, TYPE)
void SetEnumValueInternal(Message *message, const FieldDescriptor *field, int value) const
FloatingPoint< double > Double
const uint32 * GetHasBits(const Message &message) const
TypeWithSize< 4 >::UInt UInt32
void AddField(Message *message, const FieldDescriptor *field, const Type &value) const
static void InternalRegisterGeneratedMessage(const Descriptor *descriptor, const Message *prototype)
T * OnShutdownDelete(T *p)
std::string GetRepeatedString(const Message &message, const FieldDescriptor *field, int index) const
zend_class_entry * message_type
const FieldDescriptor * field(int index) const
static size_t begin(const upb_table *t)
void SwapFields(Message *message1, Message *message2, const std::vector< const FieldDescriptor * > &fields) const
const Message *const * default_instance_data_
const DescriptorPool *const descriptor_pool_
void AppendToList(const Descriptor *containing_type, const DescriptorPool *pool, std::vector< const FieldDescriptor * > *output) const
static void InternalAddGeneratedFile(const void *encoded_file_descriptor, int size)
void SetRepeatedString(int number, int index, const std::string &value)
#define USAGE_CHECK_SINGULAR(METHOD)
uint32 HasBitIndex(const FieldDescriptor *field) const
UnknownFieldSet * MutableUnknownFields(Message *message) const
void AddEnum(Message *message, const FieldDescriptor *field, const EnumValueDescriptor *value) const
RepeatedField< T > * MutableRepeatedField(Message *, const FieldDescriptor *) const
MessageLite * MutableMessage(int number, FieldType type, const MessageLite &prototype, desc)
FloatingPoint< float > Float
bool HasOneof(const Message &message, const OneofDescriptor *oneof_descriptor) const
static DescriptorPool * internal_generated_pool()
const OneofDescriptor * oneof_decl(int index) const
size_t StringSpaceUsedExcludingSelfLong(const std::string &str)
void AddVarint(int number, uint64 value)
void ClearBit(Message *message, const FieldDescriptor *field) const
void SetString(int number, FieldType type, const std::string &value, desc)
void AddString(int number, FieldType type, const std::string &value, desc)
const UnknownFieldSet & GetUnknownFields(const Message &message) const
int GetRepeatedEnumValue(const Message &message, const FieldDescriptor *field, int index) const
int oneof_decl_count() const
void AddEnumValue(Message *message, const FieldDescriptor *field, int value) const
int GetRepeatedEnum(int number, int index) const
#define GOOGLE_LOG(LEVEL)
void ClearField(Message *message, const FieldDescriptor *field) const
void swap(Json::Value &a, Json::Value &b)
Specialize std::swap() for Json::Value.
void UnknownFieldSetSerializer(const uint8 *base, uint32 offset, uint32 tag, uint32 has_offset, io::CodedOutputStream *output)
struct EnumValueDescriptor EnumValueDescriptor
const EnumValueDescriptor * GetEnum(const Message &message, const FieldDescriptor *field) const
void * RepeatedFieldData(Message *message, const FieldDescriptor *field, FieldDescriptor::CppType cpp_type, const Descriptor *message_type) const
MapIterator MapBegin(Message *message, const FieldDescriptor *field) const
void SetField(Message *message, const FieldDescriptor *field, const Type &value) const
const void * GetRawRepeatedField(const Message &message, const FieldDescriptor *field, FieldDescriptor::CppType cpptype, int ctype, const Descriptor *message_type) const
void SetRepeatedEnumValue(Message *message, const FieldDescriptor *field, int index, int value) const
bool InsertOrLookupMapValue(Message *message, const FieldDescriptor *field, const MapKey &key, MapValueRef *val) const
void SwapElements(Message *message, const FieldDescriptor *field, int index1, int index2) const
void RemoveLast(Message *message, const FieldDescriptor *field) const
const RepeatedPtrField< T > & GetRepeatedPtrField(const Message &, const FieldDescriptor *) const
int GetEnum(int number, int default_value) const
int32 has_bit_indices_index
void SetEnum(Message *message, const FieldDescriptor *field, const EnumValueDescriptor *value) const
void ClearExtension(int number)
void Swap(InlinedStringField *from) PROTOBUF_ALWAYS_INLINE
const MessageLite & GetRepeatedMessage(int number, int index) const
const FieldDescriptor * field
void AddString(Message *message, const FieldDescriptor *field, const std::string &value) const
int FieldSize(const Message &message, const FieldDescriptor *field) const
const SETUP_TEARDOWN_TESTCONTEXT char * key
int weak_field_map_offset_
const std::string & GetString(int number, const std::string &default_value) const
const Metadata * GetCurrentMetadataPtr() const
uint32 GetOneofCase(const Message &message, const OneofDescriptor *oneof_descriptor) const
void AddAllocatedMessage(const FieldDescriptor *descriptor, MessageLite *new_entry)
Message * MutableMessage(Message *message, const FieldDescriptor *field, MessageFactory *factory=nullptr) const
Arena * GetArena(Message *message) const
#define GOOGLE_CHECK(EXPRESSION)
InternalDescriptorPool * pool
std::vector< std::pair< const Metadata *, const Metadata * > > metadata_arrays_
#define USAGE_CHECK_MESSAGE_TYPE(METHOD)
const PROTOBUF_EXPORT std::string & GetEmptyString()
#define USAGE_CHECK(CONDITION, METHOD, ERROR_DESCRIPTION)
bool Has(int number) const
uint32 GetMetadataOffset() const
static const upb_fielddef fields[107]
void * MutableRawRepeatedField(Message *message, const FieldDescriptor *field, FieldDescriptor::CppType, int ctype, const Descriptor *message_type) const
const FieldDescriptor * FindExtensionByNumber(const Descriptor *extendee, int number) const
uint32 GetFieldOffsetNonOneof(const FieldDescriptor *field) const
void SwapField(Message *message1, Message *message2, const FieldDescriptor *field) const
Message * ReleaseLast(Message *message, const FieldDescriptor *field) const
PROTOBUF_ALWAYS_INLINE void Swap(ArenaStringPtr *other)
uint32 * MutableHasBits(Message *message) const
TypeHandler::Type * AddFromCleared()
const Descriptor * GetDescriptor() const
const Type & DefaultRaw(const FieldDescriptor *field) const
void SwapElements(int number, int index1, int index2)
Message * MutableRepeatedMessage(Message *message, const FieldDescriptor *field, int index) const
const std::string & full_name() const
void SwapExtension(ExtensionSet *other, int number)
const Descriptor *const descriptor_
void SetEnumValue(Message *message, const FieldDescriptor *field, int value) const
bool DeleteMapValue(Message *message, const FieldDescriptor *field, const MapKey &key) const
const T & GetRawNonOneof(const Message &message, const FieldDescriptor *field) const
T * MutableRawNonOneof(Message *message, const FieldDescriptor *field) const
Message * UnsafeArenaReleaseMessage(Message *message, const FieldDescriptor *field, MessageFactory *factory=nullptr) const
const std::string & GetRepeatedString(int number, int index) const
const Type & GetRaw(const Message &message, const FieldDescriptor *field) const
void SetOneofCase(Message *message, const FieldDescriptor *field) const
const upb_json_parsermethod * m
virtual void MergeFrom(const Message &from)
#define DEFINE_PRIMITIVE_ACCESSORS(TYPENAME, TYPE, PASSTYPE, CPPTYPE)
const FileDescriptor * file() const
const MessageLite & GetMessage(int number, const MessageLite &default_value) const
Reflection(const Descriptor *descriptor, const internal::ReflectionSchema &schema, const DescriptorPool *pool, MessageFactory *factory)
uint32 * MutableOneofCase(Message *message, const OneofDescriptor *oneof_descriptor) const
void RegisterAllTypesInternal(const Metadata *file_level_metadata, int size)
Metadata * file_level_metadata_
Message * New() const override=0
const Type & GetField(const Message &message, const FieldDescriptor *field) const
const EnumDescriptor ** file_level_enum_descriptors_
int GetEnumValue(const Message &message, const FieldDescriptor *field) const
bool HasBit(const Message &message, const FieldDescriptor *field) const
#define SWAP_ARRAYS(CPPTYPE, TYPE)
AssignDescriptorsHelper(MessageFactory *factory, Metadata *file_level_metadata, const EnumDescriptor **file_level_enum_descriptors, const MigrationSchema *schemas, const Message *const *default_instance_data, const uint32 *offsets)
void SetBit(Message *message, const FieldDescriptor *field) const
void AddAllocated(typename TypeHandler::Type *value)
void SetRepeatedField(Message *message, const FieldDescriptor *field, int index, Type value) const
internal::InternalMetadataWithArena * MutableInternalMetadataWithArena(Message *message) const
MessageLite * UnsafeArenaReleaseMessage(int number, const MessageLite &prototype)
static constexpr CType STRING
Type * MutableRaw(Message *message, const FieldDescriptor *field) const
MessageLite * ReleaseLast(int number)
void AssignDescriptors(const DescriptorTable *table)
#define SET_ONEOF_VALUE2(CPPTYPE, TYPE)
#define USAGE_CHECK_ENUM_VALUE(METHOD)
void SwapOneofField(Message *message1, Message *message2, const OneofDescriptor *oneof_descriptor) const
const internal::MapFieldBase * GetMapData(const Message &message, const FieldDescriptor *field) const
bool IsInlined(const FieldDescriptor *field) const
void AddAllocatedMessage(Message *message, const FieldDescriptor *field, Message *new_entry) const
MessageLite * AddMessage(int number, FieldType type, const MessageLite &prototype, desc)
GLsizei const GLfloat * value
const Descriptor * descriptor_
bool HasExtensionSet() const
void AddEnum(int number, FieldType type, bool packed, int value, desc)
Message * AddMessage(Message *message, const FieldDescriptor *field, MessageFactory *factory=nullptr) const
bool IsDefaultInstance(const Message &message) const
Message * ReleaseMessage(Message *message, const FieldDescriptor *field, MessageFactory *factory=nullptr) const
const uint32 * has_bit_indices_
const upb_json_parsermethod const upb_symtab upb_sink * output
void SetRepeatedEnum(Message *message, const FieldDescriptor *field, int index, const EnumValueDescriptor *value) const
uint32 GetExtensionSetOffset() const
void Swap(UnknownFieldSet *x)
void SetEnum(int number, FieldType type, int value, desc)
void ListFields(const Message &message, std::vector< const FieldDescriptor * > *output) const
#define USAGE_CHECK_ALL(METHOD, LABEL, CPPTYPE)
uint32 HasBitsOffset() const
GLenum GLuint GLenum GLsizei const GLchar * message
MessageLite * MutableRepeatedMessage(int number, int index)
void Set(const ::std::string *default_value, const ::std::string &value, Arena *arena)
const Message & GetRepeatedMessage(const Message &message, const FieldDescriptor *field, int index) const
const Descriptor::ReservedRange const EnumValueDescriptor method
FieldDescriptor::CppType cpp_type(FieldType type)
void AddDescriptors(const DescriptorTable *table)
size_t SpaceUsedExcludingSelfLong() const
void AddEnumValueInternal(Message *message, const FieldDescriptor *field, int value) const
const Message & GetMessage(const Message &message, const FieldDescriptor *field, MessageFactory *factory=nullptr) const
MapIterator MapEnd(Message *message, const FieldDescriptor *field) const
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:51