Index: mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl |
index e905904174d920db89fbd7ef087b7fb70b890929..2a9a2f4c1b5dd41ecbc0ce80a0b58850340a20eb 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl |
@@ -65,3 +65,19 @@ void {{union.name}}::DestroyActive() { |
{%- endfor %} |
} |
} |
+ |
+{%- if union|is_hashable %} |
+size_t {{union.name}}::Hash(size_t seed) const { |
yzshen1
2016/09/22 23:48:56
Does this needs to call different hash functions a
tibell
2016/09/23 00:07:07
Done.
|
+ seed = mojo::internal::HashCombine(seed, static_cast<uint32_t>(tag_)); |
+ switch (tag_) { |
+{% for field in union.fields %} |
+ case Tag::{{field.name|upper}}: |
+ return mojo::internal::Hash(seed, data_.{{field.name}}); |
+{%- endfor %} |
+ default: |
+ NOTREACHED(); |
+ return seed; |
+ } |
+} |
+ |
+{%- endif %} |