Go to the documentation of this file.
41 #include <unordered_set>
59 #include <google/protobuf/port_def.inc>
68 static const char kAnyMessageName[] =
"Any";
69 static const char kAnyProtoFile[] =
"google/protobuf/any.proto";
75 static const char*
const kKeywordList[] = {
160 static std::unordered_set<std::string>* MakeKeywordsMap() {
161 auto* result =
new std::unordered_set<std::string>();
162 for (
const auto keyword : kKeywordList) {
163 result->emplace(keyword);
168 static std::unordered_set<std::string>& kKeywords = *MakeKeywordsMap();
171 char Base63Char(
int value) {
184 template <
typename I>
188 res += Base63Char(
static_cast<int>(
n % 63));
195 if (
options.opensource_runtime) {
196 return "::PROTOBUF_NAMESPACE_ID::" +
type;
203 std::map<std::string, std::string>* variables) {
210 std::map<std::string, std::string>* variables) {
217 if (
options.opensource_runtime) {
218 (*variables)[
"GOOGLE_PROTOBUF"] =
"GOOGLE_PROTOBUF";
219 (*variables)[
"CHK"] =
"GOOGLE_CHECK";
220 (*variables)[
"DCHK"] =
"GOOGLE_DCHECK";
226 (*variables)[
"GOOGLE_PROTOBUF"] =
229 (*variables)[
"CHK"] =
232 (*variables)[
"DCHK"] =
237 SetIntVar(
options,
"int8", variables);
238 SetIntVar(
options,
"uint8", variables);
239 SetIntVar(
options,
"uint32", variables);
240 SetIntVar(
options,
"uint64", variables);
241 SetIntVar(
options,
"int32", variables);
242 SetIntVar(
options,
"int64", variables);
243 (*variables)[
"string"] =
"std::string";
247 bool cap_next_letter) {
250 for (
int i = 0;
i <
input.size();
i++) {
252 if (cap_next_letter) {
253 result +=
input[
i] + (
'A' -
'a');
257 cap_next_letter =
false;
261 cap_next_letter =
false;
264 cap_next_letter =
true;
266 cap_next_letter =
true;
273 "// ===================================================================\n";
275 "// -------------------------------------------------------------------\n";
278 if (
field->is_repeated() ||
field->is_extension())
return false;
279 switch (
field->cpp_type()) {
281 return field->default_value_enum()->number() == 0;
283 return field->default_value_int32() == 0;
285 return field->default_value_int64() == 0;
287 return field->default_value_uint32() == 0;
289 return field->default_value_uint64() == 0;
291 return field->default_value_float() == 0;
293 return field->default_value_double() == 0;
295 return field->default_value_bool() ==
false;
304 if (parent) res +=
ClassName(parent) +
"_";
337 if (
package.empty())
return "";
338 return "::" + DotsToColons(
package);
349 "PROTOBUF_NAMESPACE_ID",
false);
404 if (kKeywords.count(
name) > 0) {
413 if (kKeywords.count(result) > 0) {
421 if (kKeywords.count(result) > 0) {
428 if (
field ==
nullptr)
return 0;
429 if (
field->is_repeated())
return 8;
430 switch (
field->cpp_type()) {
453 std::string result =
"k" + field_name +
"FieldNumber";
455 if (!
field->is_extension() &&
456 field->containing_type()->FindFieldByCamelcaseName(
485 return "::google::protobuf::int32";
487 return "::google::protobuf::int64";
489 return "::google::protobuf::uint32";
491 return "::google::protobuf::uint64";
501 return "std::string";
517 return IntTypeName(
options,
"int32");
519 return IntTypeName(
options,
"int64");
521 return IntTypeName(
options,
"uint32");
523 return IntTypeName(
options,
"uint64");
533 return "std::string";
607 return StrCat(macro_prefix,
"_LONGLONG(",
number + 1,
") - 1");
613 return StrCat(macro_prefix,
"_ULONGLONG(",
number,
")");
617 switch (
field->cpp_type()) {
628 switch (
field->cpp_type()) {
632 return StrCat(
field->default_value_uint32()) +
"u";
639 if (
value == std::numeric_limits<double>::infinity()) {
640 return "std::numeric_limits<double>::infinity()";
641 }
else if (
value == -std::numeric_limits<double>::infinity()) {
642 return "-std::numeric_limits<double>::infinity()";
644 return "std::numeric_limits<double>::quiet_NaN()";
651 if (
value == std::numeric_limits<float>::infinity()) {
652 return "std::numeric_limits<float>::infinity()";
653 }
else if (
value == -std::numeric_limits<float>::infinity()) {
654 return "-std::numeric_limits<float>::infinity()";
656 return "std::numeric_limits<float>::quiet_NaN()";
662 if (float_value.find_first_of(
".eE") != string::npos) {
663 float_value.push_back(
'f');
669 return field->default_value_bool() ?
"true" :
"false";
682 "::internal_default_instance()";
694 for (
int i = 0;
i < filename.size();
i++) {
696 result.push_back(filename[
i]);
700 StrAppend(&result,
"_", strings::Hex(
static_cast<uint8>(filename[
i])));
734 if (
descriptor->FindFieldByName(function_name)) {
737 function_name.append(
"__");
738 }
else if (kKeywords.count(
name) > 0) {
741 function_name.append(
"_");
743 return function_name;
748 if (
options.opensource_runtime)
return false;
752 if (
descriptor->containing_type()->options().map_entry())
return false;
767 for (
int field_idx = 0; field_idx <
descriptor->field_count(); field_idx++) {
793 for (
int field_idx = 0; field_idx < file->
extension_count(); field_idx++) {
868 if (
descriptor->extension_range_count() > 0)
return true;
869 if (
descriptor->extension_count() > 0)
return true;
922 switch (
field->cpp_type()) {
944 if (
options.opensource_runtime) {
949 return field->options().ctype();
958 return descriptor->name() == kAnyMessageName &&
963 static const std::unordered_set<std::string> well_known_files{
964 "google/protobuf/any.proto",
965 "google/protobuf/api.proto",
966 "google/protobuf/compiler/plugin.proto",
967 "google/protobuf/descriptor.proto",
968 "google/protobuf/duration.proto",
969 "google/protobuf/empty.proto",
970 "google/protobuf/field_mask.proto",
971 "google/protobuf/source_context.proto",
972 "google/protobuf/struct.proto",
973 "google/protobuf/timestamp.proto",
974 "google/protobuf/type.proto",
975 "google/protobuf/wrappers.proto",
977 return well_known_files.find(file->
name()) != well_known_files.end();
1017 return "UTF8Verify";
1027 const char* strict_function,
1028 const char* verify_function,
1035 format(
"::$proto_ns$::internal::WireFormatLite::$1$(\n", strict_function);
1039 format(
"::$proto_ns$::internal::WireFormatLite::PARSE,\n");
1041 format(
"::$proto_ns$::internal::WireFormatLite::SERIALIZE,\n");
1052 format(
"::$proto_ns$::internal::WireFormat::$1$(\n", verify_function);
1056 format(
"::$proto_ns$::internal::WireFormat::PARSE,\n");
1058 format(
"::$proto_ns$::internal::WireFormat::SERIALIZE,\n");
1074 "VerifyUtf8String",
"VerifyUTF8StringNamedField",
1083 "VerifyUTF8CordNamedField",
format);
1089 std::vector<const Descriptor*>* flatten) {
1098 std::vector<const Descriptor*>* result) {
1120 return options.lite_implicit_weak_fields &&
1129 field->containing_oneof() ==
nullptr &&
1131 field->message_type()->file()->name() !=
1132 "net/proto2/proto/descriptor.proto" &&
1144 if (
descriptor->extension_range_count() > 0) {
1145 result.contains_extension =
true;
1154 if (
field->is_required()) {
1155 result.contains_required =
true;
1157 switch (
field->type()) {
1160 result.constructor_requires_initialization =
true;
1162 result.contains_cord =
true;
1168 result.constructor_requires_initialization =
true;
1182 result.is_recursive =
true;
1199 std::vector<const FieldDescriptor*>*
fields) {
1201 for (
int i = 0;
i <
d->nested_type_count();
i++) {
1205 for (
int i = 0;
i <
d->extension_count();
i++) {
1206 fields->push_back(
d->extension(
i));
1209 for (
int i = 0;
i <
d->field_count();
i++) {
1215 std::vector<const FieldDescriptor*>*
fields) {
1217 for (
int i = 0;
i <
d->message_type_count();
i++) {
1221 for (
int i = 0;
i <
d->extension_count();
i++) {
1222 fields->push_back(
d->extension(
i));
1227 std::vector<const Descriptor*>*
types) {
1240 if (
options.opensource_runtime) {
1244 std::unordered_map<std::string, std::string> bootstrap_mapping{
1245 {
"net/proto2/proto/descriptor",
1246 "net/proto2/internal/descriptor"},
1247 {
"net/proto2/compiler/proto/plugin",
1248 "net/proto2/compiler/proto/plugin"},
1249 {
"net/proto2/compiler/proto/profile",
1250 "net/proto2/compiler/proto/profile_bootstrap"},
1252 auto iter = bootstrap_mapping.find(basename);
1253 if (iter == bootstrap_mapping.end()) {
1254 *bootstrap_basename = basename;
1257 *bootstrap_basename = iter->second;
1274 if (bootstrap_flag) {
1276 *basename = bootstrap_basename;
1279 std::string forward_to_basename = bootstrap_basename;
1283 std::unique_ptr<io::ZeroCopyOutputStream>
output(
1284 generator_context->
Open(*basename +
".pb.h"));
1287 "#ifndef PROTOBUF_INCLUDED_$filename_identifier$_FORWARD_PB_H\n"
1288 "#define PROTOBUF_INCLUDED_$filename_identifier$_FORWARD_PB_H\n"
1289 "#include \"$forward_to_basename$.pb.h\" // IWYU pragma: export\n"
1290 "#endif // PROTOBUF_INCLUDED_$filename_identifier$_FORWARD_PB_H\n",
1291 "forward_to_basename", forward_to_basename,
"filename_identifier",
1294 if (!
options.opensource_runtime) {
1297 if (*basename ==
"net/proto/protocoltype") {
1300 "%include \"$forward_to_basename$.pb.h\"\n"
1302 "forward_to_basename", forward_to_basename);
1308 std::unique_ptr<io::ZeroCopyOutputStream>
output(
1309 generator_context->
Open(*basename +
".proto.h"));
1312 "#ifndef PROTOBUF_INCLUDED_$filename_identifier$_FORWARD_PROTO_H\n"
1313 "#define PROTOBUF_INCLUDED_$filename_identifier$_FORWARD_PROTO_H\n"
1314 "#include \"$forward_to_basename$.proto.h\" // IWYU pragma: "
1317 "PROTOBUF_INCLUDED_$filename_identifier$_FORWARD_PROTO_H\n",
1318 "forward_to_basename", forward_to_basename,
"filename_identifier",
1323 std::unique_ptr<io::ZeroCopyOutputStream>
output(
1324 generator_context->
Open(*basename +
".pb.cc"));
1326 printer.
Print(
"\n");
1330 std::unique_ptr<io::ZeroCopyOutputStream>
output(
1331 generator_context->
Open(*basename +
".pb.h.meta"));
1335 std::unique_ptr<io::ZeroCopyOutputStream>
output(
1336 generator_context->
Open(*basename +
".proto.h.meta"));
1359 std::map<std::string, std::string> vars;
1363 std::vector<const FieldDescriptor*> ordered_fields;
1365 ordered_fields.push_back(
field);
1367 std::sort(ordered_fields.begin(), ordered_fields.end(),
1369 return a->number() < b->number();
1373 "const char* $classname$::_InternalParse(const char* ptr, "
1374 "$pi_ns$::ParseContext* ctx) {\n"
1375 "#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure\n");
1377 int hasbits_size = 0;
1382 if (hasbits_size != 1) hasbits_size = 0;
1384 format_(
"_Internal::HasBits has_bits{};\n");
1390 if (
descriptor->file()->options().cc_enable_arenas()) {
1391 format_(
"$p_ns$::Arena* arena = GetArenaNoVirtual(); (void)arena;\n");
1396 if (hasbits_size)
format_(
" _has_bits_.Or(has_bits);\n");
1417 if (!field_name.empty()) {
1418 format_(
"static const char kFieldName[] = $1$;\n",
1419 field_name.substr(2));
1420 field_name =
", kFieldName";
1425 string default_string =
1426 field->default_value_string().empty()
1428 "::internal::GetEmptyStringAlreadyInited()"
1432 "if (arena != nullptr) {\n"
1433 " ptr = $pi_ns$::InlineCopyIntoArenaString$1$(&$2$_, ptr, ctx, "
1437 "$pi_ns$::InlineGreedyStringParser$1$($2$_.MutableNoArenaNoDefault(&$4$"
1448 if (!utf8.empty()) {
1449 field_name =
", nullptr";
1451 field_name =
StrCat(
", \"",
field->full_name(),
"\"");
1458 ctype =
field->options().ctype();
1460 if (
field->file()->options().cc_enable_arenas() && !
field->is_repeated() &&
1464 field->default_value_string().empty() &&
1473 name =
"GreedyStringParser" + utf8;
1476 name =
"CordParser" + utf8;
1479 name =
"StringPieceParser" + utf8;
1482 format_(
"ptr = $pi_ns$::Inline$1$($2$_$3$(), ptr, ctx$4$);\n",
name,
1483 field->is_repeated() && !
field->is_packable() ?
"add" :
"mutable",
1488 if (
field->is_packable()) {
1494 "_IsValid, &_internal_metadata_, ",
field->number());
1496 format_(
"ptr = $pi_ns$::Packed$1$Parser(mutable_$2$(), ptr, ctx$3$);\n",
1509 if (
field->is_map()) {
1511 field->message_type()->FindFieldByName(
"value");
1516 "auto object = ::$proto_ns$::internal::InitEnumParseWrapper("
1517 "&$1$_, $2$_IsValid, $3$, &_internal_metadata_);\n"
1518 "ptr = ctx->ParseMessage(&object, ptr);\n",
1522 format_(
"ptr = ctx->ParseMessage(&$1$_, ptr);\n",
1526 if (
field->containing_oneof() !=
nullptr) {
1528 "if (!has_$1$()) {\n"
1530 " $2$_.$1$_ = ::$proto_ns$::Arena::CreateMessage<\n"
1531 " $pi_ns$::LazyField>("
1532 "GetArenaNoVirtual());\n"
1535 "ptr = ctx->ParseMessage($2$_.$1$_, ptr);\n",
1539 "_Internal::set_has_$1$(&$has_bits$);\n"
1540 "ptr = ctx->ParseMessage(&$1$_, ptr);\n",
1543 format_(
"ptr = ctx->ParseMessage(&$1$_, ptr);\n",
1547 if (!
field->is_repeated()) {
1549 "ptr = ctx->ParseMessage(_Internal::mutable_$1$(this), "
1554 "ptr = ctx->ParseMessage("
1555 "CastToBase(&$1$_)->AddWeak(reinterpret_cast<const "
1556 "::$proto_ns$::MessageLite*>(&$2$::_$3$_default_instance_)), "
1563 "ptr = ctx->ParseMessage(_weak_field_map_.MutableMessage($1$,"
1564 " _$classname$_default_instance_.$2$_), ptr);\n",
1567 format_(
"ptr = ctx->ParseMessage($1$_$2$(), ptr);\n",
1573 GOOGLE_LOG(
FATAL) <<
"Illegal combination for length delimited wiretype "
1574 <<
" filed type is " <<
field->type();
1582 if (
x >= 128)
x += (
x & 0xFF80) + 128;
1588 constexpr
int kMaxTwoByteFieldNumber = 16 * 128;
1589 return descriptor->number() < kMaxTwoByteFieldNumber &&
1604 "$uint64$ val = $pi_ns$::ReadVarint(&ptr);\n"
1607 format_(
"if (PROTOBUF_PREDICT_TRUE($1$_IsValid(val))) {\n",
1617 " $pi_ns$::WriteVarint($1$, val, mutable_unknown_fields());\n"
1628 if (
field->is_repeated() ||
field->containing_oneof()) {
1629 string prefix =
field->is_repeated() ?
"add" :
"set";
1631 "$1$_$2$($pi_ns$::ReadVarint$3$(&ptr));\n"
1636 format_(
"_Internal::set_has_$1$(&$has_bits$);\n",
1640 "$1$_ = $pi_ns$::ReadVarint$2$(&ptr);\n"
1650 if (
field->is_repeated() ||
field->containing_oneof()) {
1651 string prefix =
field->is_repeated() ?
"add" :
"set";
1653 "$1$_$2$($pi_ns$::UnalignedLoad<$3$>(ptr));\n"
1654 "ptr += sizeof($3$);\n",
1661 "$1$_ = $pi_ns$::UnalignedLoad<$2$>(ptr);\n"
1662 "ptr += sizeof($2$);\n",
1674 "ptr = ctx->ParseGroup($1$_$2$(), ptr, $3$);\n"
1689 uint32* fallback_tag_ptr) {
1691 if (
field->is_packable()) {
1701 *fallback_tag_ptr = fallback_tag;
1707 return expected_tag;
1712 const std::vector<const FieldDescriptor*>& ordered_fields) {
1714 "while (!ctx->Done(&ptr)) {\n"
1716 " ptr = $pi_ns$::ReadTag(ptr, &tag);\n"
1718 " switch (tag >> 3) {\n");
1723 for (
const auto*
field : ordered_fields) {
1730 options.elide_group_body =
true;
1731 options.elide_oneof_body =
true;
1733 def = def.substr(0, def.find_first_of(
'\n'));
1738 def,
field->number());
1743 "if (PROTOBUF_PREDICT_TRUE(static_cast<$uint8$>(tag) == $1$)) {\n",
1744 expected_tag & 0xFF);
1760 string type = tag_size == 2 ?
"uint16" :
"uint8";
1763 " if (!ctx->DataAvailable(ptr)) break;\n"
1764 "} while ($pi_ns$::UnalignedLoad<$1$>(ptr) == $2$);\n",
1769 format_(
"} else if (static_cast<$uint8$>(tag) == $1$) {\n",
1770 fallback_tag & 0xFF);
1777 " } else goto handle_unusual;\n"
1783 if (!ordered_fields.empty())
format_(
"handle_unusual:\n");
1785 " if ((tag & 7) == 4 || tag == 0) {\n"
1786 " ctx->SetLastTag(tag);\n"
1792 if (
descriptor->extension_range_count() > 0) {
1794 for (
int i = 0;
i <
descriptor->extension_range_count();
i++) {
1795 const Descriptor::ExtensionRange*
range =
1805 format_(
"($1$u <= tag)", start_tag);
1807 format_(
"($1$u <= tag && tag < $2$u)", start_tag, end_tag);
1812 " ptr = _extensions_.ParseField(tag, ptr,\n"
1813 " internal_default_instance(), &_internal_metadata_, ctx);\n"
1814 " CHK_(ptr != nullptr);\n"
1819 " ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);\n"
1820 " CHK_(ptr != nullptr);\n"
void GenerateLengthDelim(const FieldDescriptor *field)
void Print(const std::map< std::string, std::string > &variables, const char *text)
bool IsBootstrapProto(const Options &options, const FileDescriptor *file)
#define GOOGLE_CHECK_EQ(A, B)
bool IsAnyMessage(const FileDescriptor *descriptor, const Options &options)
GLuint const GLchar * name
const Descriptor::ReservedRange value
bool IsStringOrMessage(const FieldDescriptor *field)
void GenerateArenaString(const FieldDescriptor *field, const std::string &utf8, std::string field_name)
static Utf8CheckMode GetUtf8CheckMode(const FieldDescriptor *field, const Options &options)
string SimpleDtoa(double value)
static constexpr OptimizeMode LITE_RUNTIME
std::string FieldName(const FieldDescriptor *field)
zend_class_entry * field_type
std::string ProtobufNamespace(const Options &options)
string StrCat(const AlphaNum &a, const AlphaNum &b)
std::string StripProto(const std::string &filename)
GLsizei GLenum GLenum * types
FieldRangeImpl< T > FieldRange(const T *desc)
def parameters(*testcases)
void GenerateParserLoop(const Descriptor *descriptor)
std::string FieldConstantName(const FieldDescriptor *field)
static void GenerateUtf8CheckCode(const FieldDescriptor *field, const Options &options, bool for_parse, const char *parameters, const char *strict_function, const char *verify_function, const Formatter &format)
static bool HasEnumDefinitions(const Descriptor *message_type)
virtual io::ZeroCopyOutputStream * Open(const std::string &filename)=0
static bool HasLazyFields(const Descriptor *descriptor, const Options &options)
std::string GetUtf8Suffix(const FieldDescriptor *field, const Options &options)
string CEscape(const string &src)
std::string QualifiedClassName(const Descriptor *d, const Options &options)
bool IsStringInlined(const FieldDescriptor *descriptor, const Options &options)
bool HasPreservingUnknownEnumSemantics(const FieldDescriptor *field)
std::string SuperClassName(const Descriptor *descriptor, const Options &options)
GLsizei const GLchar *const * string
std::string UInt64ToString(const std::string ¯o_prefix, uint64 number)
int EstimateAlignmentSize(const FieldDescriptor *field)
std::string MakeDefaultName(const FieldDescriptor *field)
static const int64 kint64min
std::string EnumValueName(const EnumValueDescriptor *enum_value)
string UniqueName(const std::string &name, const std::string &filename, const Options &options)
FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor *file, const Options &options)
static bool FileUtf8Verification(const FileDescriptor *file, const Options &options)
const char * DeclaredTypeMethodName(FieldDescriptor::Type type)
static bool FieldEnforceUtf8(const FieldDescriptor *field, const Options &options)
static uint32_t idx(tarjan *t, const upb_refcounted *r)
int enum_type_count() const
std::string ReferenceFunctionName(const Descriptor *descriptor, const Options &options)
static bool HasMapFields(const Descriptor *descriptor)
void FlattenMessagesInFile(const FileDescriptor *file, std::vector< const Descriptor * > *result)
bool IsWeak(const FieldDescriptor *field, const Options &options)
static bool ShouldRepeat(const FieldDescriptor *descriptor, internal::WireFormatLite::WireType wiretype)
const std::string & name() const
bool HasWeakFields(const Descriptor *descriptor, const Options &options)
GLboolean GLboolean GLboolean b
void GenerateUtf8CheckCodeForString(const FieldDescriptor *field, const Options &options, bool for_parse, const char *parameters, const Formatter &format)
static bool IsStringPieceField(const FieldDescriptor *field, const Options &options)
std::string FileDllExport(const FileDescriptor *file, const Options &options)
static const int kMaxNumber
zend_class_entry * message_type
const std::string & package() const
static bool HasStringPieceFields(const Descriptor *descriptor, const Options &options)
bool UsingImplicitWeakFields(const FileDescriptor *file, const Options &options)
void GenerateStrings(const FieldDescriptor *field, bool check_utf8)
std::string SafeFunctionName(const Descriptor *descriptor, const FieldDescriptor *field, const std::string &prefix)
static uint32 SmallVarintValue(uint32 x)
const ServiceDescriptor * service(int index) const
static const char prefix[]
FieldOptions::CType EffectiveStringCType(const FieldDescriptor *field, const Options &options)
bool IsLazy(const FieldDescriptor *field, const Options &options)
void GenerateParseLoop(const Descriptor *descriptor, const std::vector< const FieldDescriptor * > &ordered_fields)
GLint GLint GLsizei GLint GLenum format
std::string ResolveKeyword(const string &name)
bool IsImplicitWeakField(const FieldDescriptor *field, const Options &options, MessageSCCAnalyzer *scc_analyzer)
std::string QualifiedFileLevelSymbol(const FileDescriptor *file, const std::string &name, const Options &options)
bool IsMapEntryMessage(const Descriptor *descriptor)
static size_t VarintSize32(uint32 value)
std::string FieldMessageTypeName(const FieldDescriptor *field, const Options &options)
#define GOOGLE_LOG(LEVEL)
void swap(Json::Value &a, Json::Value &b)
Specialize std::swap() for Json::Value.
std::string DefaultInstanceType(const Descriptor *descriptor, const Options &options)
std::string DescriptorTableName(const FileDescriptor *file, const Options &options)
std::string DefaultValue(const FieldDescriptor *field)
string Substitute(const char *format, const SubstituteArg &arg0, const SubstituteArg &arg1, const SubstituteArg &arg2, const SubstituteArg &arg3, const SubstituteArg &arg4, const SubstituteArg &arg5, const SubstituteArg &arg6, const SubstituteArg &arg7, const SubstituteArg &arg8, const SubstituteArg &arg9)
void SetCommonVars(const Options &options, std::map< std::string, std::string > *variables)
bool GetBootstrapBasename(const Options &options, const std::string &basename, std::string *bootstrap_basename)
std::string QualifiedDefaultInstanceName(const Descriptor *descriptor, const Options &options)
string SimpleFtoa(float value)
std::map< const SCC *, MessageAnalysis > analysis_cache_
bool HasDescriptorMethods(const FileDescriptor *file, const Options &options)
const FieldDescriptor * field
void ListAllFields(const Descriptor *d, std::vector< const FieldDescriptor * > *fields)
void LowerString(string *s)
#define GOOGLE_CHECK(EXPRESSION)
static uint32 ExpectedTag(const FieldDescriptor *field, uint32 *fallback_tag_ptr)
static bool HasCordFields(const Descriptor *descriptor, const Options &options)
const char kThickSeparator[]
std::string Int32ToString(int number)
std::string Namespace(const std::string &package)
const std::string & name() const
static const upb_fielddef fields[107]
bool IsWellKnownMessage(const FileDescriptor *file)
ParseLoopGenerator(int num_hasbits, const Options &options, MessageSCCAnalyzer *scc_analyzer, io::Printer *printer)
void GenerateFieldBody(internal::WireFormatLite::WireType wiretype, const FieldDescriptor *field)
void StringReplace(const string &s, const string &oldsub, const string &newsub, bool replace_all, string *res)
const Descriptor * message_type(int index) const
const SCC * GetSCC(const Descriptor *descriptor)
MessageAnalysis GetSCCAnalysis(const SCC *scc)
std::string FilenameIdentifier(const std::string &filename)
std::string DefaultInstanceName(const Descriptor *descriptor, const Options &options)
VALUE enum_descriptor(VALUE self)
void GenerateParserLoop(const Descriptor *descriptor, int num_hasbits, const Options &options, MessageSCCAnalyzer *scc_analyzer, io::Printer *printer)
const FieldDescriptor * extension(int index) const
void GenerateUtf8CheckCodeForCord(const FieldDescriptor *field, const Options &options, bool for_parse, const char *parameters, const Formatter &format)
int service_count() const
static bool HasExtensionsOrExtendableMessage(const Descriptor *descriptor)
std::string EscapeTrigraphs(const std::string &to_escape)
std::vector< const Descriptor * > descriptors
#define GOOGLE_CHECK_GE(A, B)
std::string ClassName(const Descriptor *descriptor)
static bool HasRepeatedFields(const Descriptor *descriptor)
std::string UnderscoresToCamelCase(const std::string &input, bool cap_next_letter)
const char * PrimitiveTypeName(FieldDescriptor::CppType type)
static constexpr CType STRING_PIECE
bool ascii_isalnum(char c)
void ListAllTypesForServices(const FileDescriptor *fd, std::vector< const Descriptor * > *types)
static bool ShouldIgnoreRequiredFieldCheck(const FieldDescriptor *field, const Options &options)
static constexpr CType STRING
SCCAnalyzer< DepsGenerator > analyzer_
bool HasFieldPresence(const FileDescriptor *file)
bool HasSuffixString(const string &str, const string &suffix)
const MethodDescriptor * method(int index) const
std::string MacroPrefix(const Options &options)
GLsizei const GLfloat * value
const char kThinSeparator[]
string StripSuffixString(const string &str, const string &suffix)
const upb_json_parsermethod const upb_symtab upb_sink * output
static constexpr CType CORD
GLboolean GLboolean GLboolean GLboolean a
int message_type_count() const
bool CanInitializeByZeroing(const FieldDescriptor *field)
std::string Int64ToString(const std::string ¯o_prefix, int64 number)
int extension_count() const
const Descriptor::ReservedRange const EnumValueDescriptor method
static bool IsCordField(const FieldDescriptor *field, const Options &options)
static const int32 kint32min
bool MaybeBootstrap(const Options &options, GeneratorContext *generator_context, bool bootstrap_flag, std::string *basename)
void StrAppend(string *result, const AlphaNum &a)
MessageSCCAnalyzer * scc_analyzer_
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:49