Index: mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl |
index 0e44acd57e65ce0bc4b131b73b8d5924eb3dd8a3..d11b198bc658d7623e77a8611659a98d8a118e92 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl |
@@ -4,12 +4,12 @@ |
which case associated functions need to be static. |
---#} |
{%- macro enum_decl(enum, is_static=false) %} |
-enum {{enum.name}} : int32_t { |
+enum class {{enum.name}} : int32_t { |
{%- for field in enum.fields %} |
{%- if field.value %} |
- {{enum.name|to_all_caps}}_{{field.name}} = {{field.value|expression_to_text}}, |
+ {{field.name}} = {{field.value|expression_to_text}}, |
{%- else %} |
- {{enum.name|to_all_caps}}_{{field.name}}, |
+ {{field.name}}, |
{%- endif %} |
{%- endfor %} |
}; |
@@ -27,6 +27,27 @@ enum {{enum.name}} : int32_t { |
bool {{enum.name}}_IsValidValue({{enum.name}} value); |
{%- endmacro %} |
+{%- macro enum_stream_operator(enum) %} |
+inline std::ostream& operator<<(std::ostream& os, {{enum|get_name_for_kind}} value) { |
+ switch(value) { |
+{%- for _, values in enum.fields|groupby('numeric_value') %} |
+ case {{enum|get_name_for_kind}}::{{values[0].name}}: |
+ return os << "{{enum|get_name_for_kind}}:: |
+{%- if values|length > 1 -%} |
+ {{'{'}} |
+{%- endif -%} |
+ {{values|map(attribute='name')|join(', ')}} |
+{%- if values|length > 1 -%} |
+ {{'}'}} |
+{%- endif -%} |
+ "; |
+{%- endfor %} |
+ default: |
+ return os << "Unknown {{enum|get_name_for_kind}} value: " << static_cast<int32_t>(value); |
+ } |
+} |
+{%- endmacro %} |
+ |
{%- macro is_valid_enum_def(enum, class_name = '') %} |
{% if class_name != '' -%} |
// static |