Go to the documentation of this file.
74 const std::map<std::string, std::string>& vars,
79 generate_array_size_(ShouldGenerateArraySize(
descriptor)),
101 auto format_value =
format;
112 if (
i > 0) format_value(
",\n");
113 format_value(
"${1$$prefix$$name$$}$ $deprecation$= $number$",
129 "$classname$_$prefix$INT_MIN_SENTINEL_DO_NOT_USE_ = "
130 "std::numeric_limits<$int32$>::min(),\n"
131 "$classname$_$prefix$INT_MAX_SENTINEL_DO_NOT_USE_ = "
132 "std::numeric_limits<$int32$>::max()");
139 "$dllexport_decl $bool $classname$_IsValid(int value);\n"
140 "constexpr $classname$ ${1$$prefix$$short_name$_MIN$}$ = "
142 "constexpr $classname$ ${1$$prefix$$short_name$_MAX$}$ = "
148 "constexpr int ${1$$prefix$$short_name$_ARRAYSIZE$}$ = "
149 "$prefix$$short_name$_MAX + 1;\n\n",
155 "$dllexport_decl $const ::$proto_ns$::EnumDescriptor* "
156 "$classname$_descriptor();\n");
162 format(
"const std::string& $classname$_Name($classname$ value);\n");
167 "template<typename T>\n"
168 "inline const std::string& $classname$_Name(T enum_t_value) {\n"
169 " static_assert(::std::is_same<T, $classname$>::value ||\n"
170 " ::std::is_integral<T>::value,\n"
171 " \"Incorrect type passed to function $classname$_Name.\");\n");
174 " return ::$proto_ns$::internal::NameOfEnum(\n"
175 " $classname$_descriptor(), enum_t_value);\n");
178 " return $classname$_Name(static_cast<$classname$>(enum_t_value));\n");
184 "inline bool $classname$_Parse(\n"
185 " const std::string& name, $classname$* value) {\n"
186 " return ::$proto_ns$::internal::ParseNamedEnum<$classname$>(\n"
187 " $classname$_descriptor(), name, value);\n"
191 "bool $classname$_Parse(\n"
192 " const std::string& name, $classname$* value);\n");
200 "template <> struct is_proto_enum< $classtype$> : ::std::true_type "
205 "inline const EnumDescriptor* GetEnumDescriptor< $classtype$>() {\n"
206 " return $classtype$_descriptor();\n"
213 format(
"typedef $classname$ $resolved_name$;\n");
219 "$1$static constexpr $resolved_name$ ${2$$3$$}$ =\n"
220 " $classname$_$3$;\n",
226 "static inline bool $nested_name$_IsValid(int value) {\n"
227 " return $classname$_IsValid(value);\n"
229 "static constexpr $resolved_name$ ${1$$nested_name$_MIN$}$ =\n"
230 " $classname$_$nested_name$_MIN;\n"
231 "static constexpr $resolved_name$ ${1$$nested_name$_MAX$}$ =\n"
232 " $classname$_$nested_name$_MAX;\n",
236 "static constexpr int ${1$$nested_name$_ARRAYSIZE$}$ =\n"
237 " $classname$_$nested_name$_ARRAYSIZE;\n",
243 "static inline const ::$proto_ns$::EnumDescriptor*\n"
244 "$nested_name$_descriptor() {\n"
245 " return $classname$_descriptor();\n"
250 "template<typename T>\n"
251 "static inline const std::string& $nested_name$_Name(T enum_t_value) {\n"
252 " static_assert(::std::is_same<T, $resolved_name$>::value ||\n"
253 " ::std::is_integral<T>::value,\n"
254 " \"Incorrect type passed to function $nested_name$_Name.\");\n"
255 " return $classname$_Name(enum_t_value);\n"
258 "static inline bool $nested_name$_Parse(const std::string& name,\n"
259 " $resolved_name$* value) {\n"
260 " return $classname$_Parse(name, value);\n"
268 "const ::$proto_ns$::EnumDescriptor* $classname$_descriptor() {\n"
269 " ::$proto_ns$::internal::AssignDescriptors(&$desc_table$);\n"
270 " return $file_level_enum_descriptors$[$1$];\n"
276 "bool $classname$_IsValid(int value) {\n"
277 " switch (value) {\n");
283 std::set<int> numbers;
286 numbers.insert(
value->number());
289 for (std::set<int>::iterator iter = numbers.begin(); iter != numbers.end();
316 std::map<std::string, int> name_to_number;
317 std::map<int, std::string> number_to_canonical_name;
320 name_to_number.emplace(
value->name(),
value->number());
323 number_to_canonical_name.emplace(
value->number(),
value->name());
327 "static ::$proto_ns$::internal::ExplicitlyConstructed<std::string> "
328 "$classname$_strings[$1$] = {};\n\n",
335 format(
"static const char $classname$_names[] =");
336 for (
const auto&
p : name_to_number) {
342 "static const ::$proto_ns$::internal::EnumEntry $classname$_entries[] "
345 std::map<int, int> number_to_index;
347 for (
const auto&
p : name_to_number) {
348 format(
" { {$classname$_names + $1$, $2$}, $3$ },\n", data_index,
349 p.first.size(),
p.second);
350 if (number_to_canonical_name[
p.second] ==
p.first) {
351 number_to_index.emplace(
p.second,
i);
354 data_index +=
p.first.size();
360 "static const int $classname$_entries_by_number[] = {\n");
361 for (
const auto&
p : number_to_index) {
362 format(
" $1$, // $2$ -> $3$\n",
p.second,
p.first,
363 number_to_canonical_name[
p.first]);
370 "const std::string& $classname$_Name(\n"
371 " $classname$ value) {\n"
372 " static const bool dummy =\n"
373 " ::$proto_ns$::internal::InitializeEnumStrings(\n"
374 " $classname$_entries,\n"
375 " $classname$_entries_by_number,\n"
376 " $1$, $classname$_strings);\n"
378 " int idx = ::$proto_ns$::internal::LookUpEnumName(\n"
379 " $classname$_entries,\n"
380 " $classname$_entries_by_number,\n"
382 " return idx == -1 ? ::$proto_ns$::internal::GetEmptyString() :\n"
383 " $classname$_strings[idx].get();\n"
387 "bool $classname$_Parse(\n"
388 " const std::string& name, $classname$* value) {\n"
390 " bool success = ::$proto_ns$::internal::LookUpEnumValue(\n"
391 " $classname$_entries, $1$, name, &int_value);\n"
393 " *value = static_cast<$classname$>(int_value);\n"
406 "#if (__cplusplus < 201703) && "
407 "(!defined(_MSC_VER) || _MSC_VER >= 1900)\n");
410 format(
"constexpr $classname$ $1$::$2$;\n", parent,
414 "constexpr $classname$ $1$::$nested_name$_MIN;\n"
415 "constexpr $classname$ $1$::$nested_name$_MAX;\n",
418 format(
"constexpr int $1$::$nested_name$_ARRAYSIZE;\n", parent);
422 "#endif // (__cplusplus < 201703) && "
423 "(!defined(_MSC_VER) || _MSC_VER >= 1900)\n");
const EnumValueOptions & options() const
void GenerateMethods(int idx, io::Printer *printer)
std::string QualifiedClassName(const Descriptor *d, const Options &options)
EnumGenerator(const EnumDescriptor *descriptor, const std::map< std::string, std::string > &vars, const Options &options)
GLsizei const GLchar *const * string
void GenerateDefinition(io::Printer *printer)
std::string EnumValueName(const EnumValueDescriptor *enum_value)
const std::string classname_
static uint32_t idx(tarjan *t, const upb_refcounted *r)
GLenum GLsizei GLsizei GLint * values
const std::string & name() const
void GenerateSymbolImports(io::Printer *printer) const
GLint GLint GLsizei GLint GLenum format
const FileDescriptor * file() const
std::string ResolveKeyword(const string &name)
const EnumValueDescriptor * value(int index) const
std::string DeprecatedAttribute(const Options &options, bool deprecated)
bool HasDescriptorMethods(const FileDescriptor *file, const Options &options)
void GenerateGetEnumDescriptorSpecializations(io::Printer *printer)
std::string Int32ToString(int number)
static const int32 kint32max
const Descriptor * containing_type() const
std::map< std::string, std::string > variables_
const bool generate_array_size_
std::string ClassName(const Descriptor *descriptor)
const EnumDescriptor * descriptor_
GLsizei const GLfloat * value
const Descriptor * descriptor_
std::map< std::string, std::string > variables_
DebugStringOptions options_
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:48