Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl

Issue 2715153004: Mojo: Support enums as map keys in WTF (Closed)
Patch Set: Address review comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 {#--- 1 {#---
2 Macro for enum definition, and the declaration of associated functions. 2 Macro for enum definition, and the declaration of associated functions.
3 ---#} 3 ---#}
4 4
5 {%- macro enum_decl(enum) %} 5 {%- macro enum_decl(enum) %}
6 {%- set enum_name = enum|get_name_for_kind(flatten_nested_kind=True) %} 6 {%- set enum_name = enum|get_name_for_kind(flatten_nested_kind=True) %}
7 enum class {{enum_name}} : int32_t { 7 enum class {{enum_name}} : int32_t {
8 {%- for field in enum.fields %} 8 {%- for field in enum.fields %}
9 {%- if field.value %} 9 {%- if field.value %}
10 {{field.name}} = {{field.value|expression_to_text}}, 10 {{field.name}} = {{field.value|expression_to_text}},
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 }; 71 };
72 {%- endmacro %} 72 {%- endmacro %}
73 73
74 {%- macro enum_hash(enum) %} 74 {%- macro enum_hash(enum) %}
75 {%- set enum_name = enum|get_qualified_name_for_kind( 75 {%- set enum_name = enum|get_qualified_name_for_kind(
76 flatten_nested_kind=True) %} 76 flatten_nested_kind=True) %}
77 template <> 77 template <>
78 struct hash<{{enum_name}}> 78 struct hash<{{enum_name}}>
79 : public mojo::internal::EnumHashImpl<{{enum_name}}> {}; 79 : public mojo::internal::EnumHashImpl<{{enum_name}}> {};
80 {%- endmacro %} 80 {%- endmacro %}
81
82 {%- macro enum_hash_blink(enum) %}
83 {%- set enum_name = enum|get_qualified_name_for_kind(
84 flatten_nested_kind=True, include_variant=False) %}
85 {%- set hash_fn_name = enum|wtf_hash_fn_name_for_enum %}
86 {# We need two unused enum values: #}
87 {%- set empty_value = -1000000 %}
88 {%- set deleted_value = -1000001 %}
89 {%- set empty_value_unused = "false" if empty_value in enum|all_enum_values el se "true" %}
90 {%- set deleted_value_unused = "false" if empty_value in enum|all_enum_values else "true" %}
91 namespace WTF {
92 struct {{hash_fn_name}} {
93 static unsigned hash(const {{enum_name}}& value) {
94 typedef base::underlying_type<{{enum_name}}>::type utype;
95 return DefaultHash<utype>::Hash().hash(static_cast<utype>(value));
96 }
97 static bool equal(const {{enum_name}}& left, const {{enum_name}}& right) {
98 return left == right;
99 }
100 static const bool safeToCompareToEmptyOrDeleted = true;
101 };
102
103 template <>
104 struct DefaultHash<{{enum_name}}> {
105 using Hash = {{hash_fn_name}};
106 };
107
108 template <>
109 struct HashTraits<{{enum_name}}>
110 : public GenericHashTraits<{{enum_name}}> {
111 static_assert({{empty_value_unused}},
112 "{{empty_value}} is a reserved enum value");
113 static_assert({{deleted_value_unused}},
114 "{{deleted_value}} is a reserved enum value");
115 static const bool hasIsEmptyValueFunction = true;
116 static bool isEmptyValue(const {{enum_name}}& value) {
117 return value == static_cast<{{enum_name}}>({{empty_value}});
118 }
119 static void constructDeletedValue({{enum_name}}& slot, bool) {
120 slot = static_cast<{{enum_name}}>({{deleted_value}});
121 }
122 static bool isDeletedValue(const {{enum_name}}& value) {
123 return value == static_cast<{{enum_name}}>({{deleted_value}});
124 }
125 };
126 } // namespace WTF
127 {%- endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698