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

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

Issue 923033003: Implement unions as members of structs. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 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/struct_serialization_definition.tmpl
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl
index 1612bbec9e571e4680dee6e0c06f7a1599915de8..dd9856bd75fd8c60e31c7ef93418a5aaaa88c65d 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl
@@ -14,7 +14,10 @@ void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf,
internal::{{struct.name}}_Data* result =
internal::{{struct.name}}_Data::New(buf);
{%- for pf in struct.packed.packed_fields %}
-{%- if pf.field.kind|is_object_kind %}
+{%- if pf.field.kind|is_union_kind %}
yzshen1 2015/02/17 19:34:35 It seems nicer to move this into the "is_object_ki
+ internal::{{pf.field.kind.name}}_Data* {{pf.field.name}}_ptr = &result->{{pf.field.name}};
+ Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &{{pf.field.name}}_ptr);
+{%- elif pf.field.kind|is_object_kind %}
{%- if pf.field.kind|is_array_kind %}
mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}}>(
mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr);
@@ -57,7 +60,9 @@ void Deserialize_(internal::{{struct.name}}_Data* input,
if (input) {
{{struct.name}}Ptr result({{struct.name}}::New());
{%- for pf in struct.packed.packed_fields %}
-{%- if pf.field.kind|is_object_kind %}
+{%- if pf.field.kind|is_union_kind %}
+ Deserialize_(&input->{{pf.field.name}}, &result->{{pf.field.name}});
+{%- elif pf.field.kind|is_object_kind %}
Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}});
{%- elif pf.field.kind|is_interface_kind %}
if (input->{{pf.field.name}}.is_valid())

Powered by Google App Engine
This is Rietveld 408576698