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

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

Issue 1618963006: Mojo C++ bindings: support enum validation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
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 d11b198bc658d7623e77a8611659a98d8a118e92..745ebf6bd189eef8d44de98515599f79397ba2bf 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
@@ -1,9 +1,7 @@
{#---
Macro for enum definition, and the declaration of associated functions.
- `is_static` is relevant if this enum declaration is defined within a class, in
- which case associated functions need to be static.
---#}
-{%- macro enum_decl(enum, is_static=false) %}
+{%- macro enum_decl(enum) %}
enum class {{enum.name}} : int32_t {
{%- for field in enum.fields %}
{%- if field.value %}
@@ -13,20 +11,36 @@ enum class {{enum.name}} : int32_t {
{%- endif %}
{%- endfor %}
};
-{{is_valid_enum_decl(enum, is_static)}}
{%- endmacro %}
-{#--- macros for the declaration & definitions of enum-associated functions.
- Namely:
- * {enum_name}_IsValidValue: returns true if the given enum has a valid value
- for this generated version of enum.
----#}
+{%- macro enum_data_decl(enum) %}
+struct {{enum.name}}_Data {
+ public:
+ // Used to identify Mojom Enum Data Classes.
+ typedef void MojomEnumDataType;
+
+ static bool const kIsExtensible = {% if enum.extensible %}true{% else %}false{% endif %};
+
+ static bool IsKnownValue(int32_t value) {
+ switch (value) {
+{%- for enum_field in enum.fields|groupby('numeric_value') %}
+ case {{enum_field[0]}}:
+{%- endfor %}
+ return true;
+ }
+ return false;
+ }
-{%- macro is_valid_enum_decl(enum, is_static=false) %}
-{% if is_static %}static {% endif -%}
-bool {{enum.name}}_IsValidValue({{enum.name}} value);
+ int32_t value;
+};
{%- endmacro %}
+{#--- macros for enum-associated functions. Namely:
+ * operator<<(): outputs the given enum value.
+ * IsKnownEnumValue(): returns true if the given enum value exists in this
+ generated version of enum.
+---#}
+
{%- macro enum_stream_operator(enum) %}
inline std::ostream& operator<<(std::ostream& os, {{enum|get_name_for_kind}} value) {
switch(value) {
@@ -48,20 +62,9 @@ inline std::ostream& operator<<(std::ostream& os, {{enum|get_name_for_kind}} val
}
{%- endmacro %}
-{%- macro is_valid_enum_def(enum, class_name = '') %}
-{% if class_name != '' -%}
-// static
-bool {{class_name}}::
-{%- else -%}
-{{"bool "}}
-{%- endif -%}
-{{enum.name}}_IsValidValue({{enum.name}} value) {
- switch (static_cast<int32_t>(value)) {
-{%- for enum_field in enum.fields|groupby('numeric_value') %}
- case {{enum_field[0]}}:
-{%- endfor %}
- return true;
- }
- return false;
+{%- macro is_known_enum_value(enum) %}
+inline bool IsKnownEnumValue({{enum|get_name_for_kind}} value) {
+ return {{enum|get_qualified_name_for_kind(internal=True)}}::IsKnownValue(
+ static_cast<int32_t>(value));
}
{%- endmacro %}
« no previous file with comments | « mojo/public/js/validation_unittests.js ('k') | mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698