aboutsummaryrefslogtreecommitdiff
path: root/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
diff options
context:
space:
mode:
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.tmpl131
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 %}