diff options
Diffstat (limited to 'mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl')
-rw-r--r-- | mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl deleted file mode 100644 index f0d503e..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl +++ /dev/null @@ -1,131 +0,0 @@ -{#--- - Macro for enum definition, and the declaration of associated functions. ----#} - -{%- macro enum_decl(enum) %} -{%- set enum_name = enum|get_name_for_kind(flatten_nested_kind=True) %} -enum class {{enum_name}} : int32_t { -{%- for field in enum.fields %} -{%- if field.value %} - {{field.name}} = {{field.value|expression_to_text}}, -{%- else %} - {{field.name}}, -{%- endif %} -{%- endfor %} -}; - -inline std::ostream& operator<<(std::ostream& os, {{enum_name}} value) { -{%- if enum.fields %} - switch(value) { -{%- for _, values in enum.fields|groupby('numeric_value') %} - case {{enum_name}}::{{values[0].name}}: - return os << "{{enum_name}}:: -{%- if values|length > 1 -%} - {{'{'}} -{%- endif -%} - {{values|map(attribute='name')|join(', ')}} -{%- if values|length > 1 -%} - {{'}'}} -{%- endif -%} - "; -{%- endfor %} - default: - return os << "Unknown {{enum_name}} value: " << static_cast<int32_t>(value); - } -{%- else %} - return os << "Unknown {{enum_name}} value: " << static_cast<int32_t>(value); -{%- endif %} -} - -{#- Returns true if the given enum value exists in this version of enum. #} -inline bool IsKnownEnumValue({{enum_name}} value) { - return {{enum|get_name_for_kind(internal=True, - flatten_nested_kind=True)}}::IsKnownValue( - static_cast<int32_t>(value)); -} -{%- endmacro %} - -{%- macro enum_data_decl(enum) %} -{%- set enum_name = enum|get_name_for_kind(flatten_nested_kind=True) %} -struct {{enum_name}}_Data { - public: - static bool constexpr kIsExtensible = {% if enum.extensible %}true{% else %}false{% endif %}; - - static bool IsKnownValue(int32_t value) { -{%- if enum.fields %} - switch (value) { -{%- for enum_field in enum.fields|groupby('numeric_value') %} - case {{enum_field[0]}}: -{%- endfor %} - return true; - } -{%- endif %} - return false; - } - - static bool Validate(int32_t value, - mojo::internal::ValidationContext* validation_context) { - if (kIsExtensible || IsKnownValue(value)) - return true; - - ReportValidationError(validation_context, - mojo::internal::VALIDATION_ERROR_UNKNOWN_ENUM_VALUE); - return false; - } -}; -{%- endmacro %} - -{%- macro enum_hash(enum) %} -{%- set enum_name = enum|get_qualified_name_for_kind( - flatten_nested_kind=True) %} -template <> -struct hash<{{enum_name}}> - : public mojo::internal::EnumHashImpl<{{enum_name}}> {}; -{%- endmacro %} - -{%- macro enum_hash_blink(enum) %} -{%- set enum_name = enum|get_qualified_name_for_kind( - flatten_nested_kind=True, include_variant=False) %} -{%- set hash_fn_name = enum|wtf_hash_fn_name_for_enum %} -{# We need two unused enum values: #} -{%- set empty_value = -1000000 %} -{%- set deleted_value = -1000001 %} -{%- set empty_value_unused = "false" if empty_value in enum|all_enum_values else "true" %} -{%- set deleted_value_unused = "false" if empty_value in enum|all_enum_values else "true" %} -namespace WTF { -struct {{hash_fn_name}} { - static unsigned hash(const {{enum_name}}& value) { - typedef base::underlying_type<{{enum_name}}>::type utype; - return DefaultHash<utype>::Hash().hash(static_cast<utype>(value)); - } - static bool equal(const {{enum_name}}& left, const {{enum_name}}& right) { - return left == right; - } - static const bool safeToCompareToEmptyOrDeleted = true; -}; - -template <> -struct DefaultHash<{{enum_name}}> { - using Hash = {{hash_fn_name}}; -}; - -template <> -struct HashTraits<{{enum_name}}> - : public GenericHashTraits<{{enum_name}}> { - static_assert({{empty_value_unused}}, - "{{empty_value}} is a reserved enum value"); - static_assert({{deleted_value_unused}}, - "{{deleted_value}} is a reserved enum value"); - static const bool hasIsEmptyValueFunction = true; - static bool isEmptyValue(const {{enum_name}}& value) { - return value == static_cast<{{enum_name}}>({{empty_value}}); - } - static void constructDeletedValue({{enum_name}}& slot, bool) { - slot = static_cast<{{enum_name}}>({{deleted_value}}); - } - static bool isDeletedValue(const {{enum_name}}& value) { - return value == static_cast<{{enum_name}}>({{deleted_value}}); - } -}; -} // namespace WTF -{%- endmacro %} |