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

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

Issue 1358353002: * Change C++ serialization/deserialization to not be move-only operations (with the except of |Ha… (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Cleanup forward declarations of array/map serialization functions Created 5 years, 3 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_macros.tmpl
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
index 48b76e5403800490cc49e7c930eebb72ada50323..1c66fcd16e504020cf28bdd14baa304d3238454b 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -16,6 +16,8 @@
{%- for pf in struct.packed.packed_fields_in_ordinal_order if pf.field.kind|is_object_kind %}
{%- if pf.field.kind|is_union_kind %}
size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}, true);
+{%- elif pf.field.kind|is_struct_kind %}
+ size += {{input_field_pattern|format(pf.field.name)}}.is_null() ? 0 : GetSerializedSize_(*{{input_field_pattern|format(pf.field.name)}}.get());
viettrungluu 2015/09/23 23:20:24 Can you break this line in some reasonable way? A
vardhan 2015/09/25 19:33:05 Done.
{%- else %}
size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}});
{%- endif %}
@@ -47,19 +49,21 @@
{%- if kind|is_array_kind %}
const mojo::internal::ArrayValidateParams {{name}}_validate_params(
{{kind|get_array_validate_params_ctor_args|indent(10)}});
- mojo::SerializeArray_(mojo::internal::Forward({{input_field}}), {{buffer}},
+ mojo::SerializeArray_(&{{input_field}}, {{buffer}},
&{{output}}->{{name}}.ptr, &{{name}}_validate_params);
{%- elif kind|is_map_kind %}
const mojo::internal::ArrayValidateParams {{name}}_validate_params(
{{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}});
mojo::SerializeMap_(
- mojo::internal::Forward({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr,
+ &{{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr,
&{{name}}_validate_params);
{%- elif kind|is_union_kind %}
internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}};
- SerializeUnion_(mojo::internal::Forward({{input_field}}), {{buffer}}, &{{name}}_ptr, true);
+ SerializeUnion_({{input_field}}.get(), {{buffer}}, &{{name}}_ptr, true);
+{%- elif kind|is_string_kind %}
+ SerializeString_({{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr);
{%- else %}
- Serialize_(mojo::internal::Forward({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr);
+ Serialize_({{input_field}}.get(), {{buffer}}, &{{output}}->{{name}}.ptr);
{%- endif %}
{%- if not kind|is_nullable_kind %}
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
@@ -126,8 +130,15 @@
{%- endif %}
{%- if kind|is_object_kind %}
{%- if kind|is_union_kind %}
- Deserialize_(&{{input}}->{{name}}, &{{output_field}});
+ {{output_field}} = {{kind|get_name_for_kind}}::New();
+ Deserialize_(&{{input}}->{{name}}, {{output_field}}.get());
+{%- elif kind|is_struct_kind %}
+ if ({{input}}->{{name}}.ptr) {
+ {{output_field}} = {{kind|get_name_for_kind}}::New();
+ Deserialize_({{input}}->{{name}}.ptr, {{output_field}}.get());
+ }
{%- else %}
+{#- Arrays and Maps #}
Deserialize_({{input}}->{{name}}.ptr, &{{output_field}});
{%- endif %}
{%- elif kind|is_interface_kind %}

Powered by Google App Engine
This is Rietveld 408576698