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

Side by Side 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 unified diff | Download patch
OLDNEW
1 size_t GetSerializedSize_(const {{struct.name}}Ptr& input) { 1 size_t GetSerializedSize_(const {{struct.name}}Ptr& input) {
2 if (!input) 2 if (!input)
3 return 0; 3 return 0;
4 size_t size = sizeof(internal::{{struct.name}}_Data); 4 size_t size = sizeof(internal::{{struct.name}}_Data);
5 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind %} 5 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind %}
6 size += GetSerializedSize_(input->{{pf.field.name}}); 6 size += GetSerializedSize_(input->{{pf.field.name}});
7 {%- endfor %} 7 {%- endfor %}
8 return size; 8 return size;
9 } 9 }
10 10
11 void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf, 11 void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf,
12 internal::{{struct.name}}_Data** output) { 12 internal::{{struct.name}}_Data** output) {
13 if (input) { 13 if (input) {
14 internal::{{struct.name}}_Data* result = 14 internal::{{struct.name}}_Data* result =
15 internal::{{struct.name}}_Data::New(buf); 15 internal::{{struct.name}}_Data::New(buf);
16 {%- for pf in struct.packed.packed_fields %} 16 {%- for pf in struct.packed.packed_fields %}
17 {%- if pf.field.kind|is_object_kind %} 17 {%- 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
18 internal::{{pf.field.kind.name}}_Data* {{pf.field.name}}_ptr = &result->{{ pf.field.name}};
19 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &{{pf.fie ld.name}}_ptr);
20 {%- elif pf.field.kind|is_object_kind %}
18 {%- if pf.field.kind|is_array_kind %} 21 {%- if pf.field.kind|is_array_kind %}
19 mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}} >( 22 mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}} >(
20 mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.fi eld.name}}.ptr); 23 mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.fi eld.name}}.ptr);
21 {%- elif pf.field.kind|is_map_kind %} 24 {%- elif pf.field.kind|is_map_kind %}
22 mojo::SerializeMap_<{{pf.field.kind.value_kind|get_map_validate_params|inden t(26)}}>( 25 mojo::SerializeMap_<{{pf.field.kind.value_kind|get_map_validate_params|inden t(26)}}>(
23 mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.fi eld.name}}.ptr); 26 mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.fi eld.name}}.ptr);
24 {%- else %} 27 {%- else %}
25 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result-> {{pf.field.name}}.ptr); 28 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result-> {{pf.field.name}}.ptr);
26 {%- endif %} 29 {%- endif %}
27 {%- if not pf.field.kind|is_nullable_kind %} 30 {%- if not pf.field.kind|is_nullable_kind %}
(...skipping 22 matching lines...) Expand all
50 } else { 53 } else {
51 *output = nullptr; 54 *output = nullptr;
52 } 55 }
53 } 56 }
54 57
55 void Deserialize_(internal::{{struct.name}}_Data* input, 58 void Deserialize_(internal::{{struct.name}}_Data* input,
56 {{struct.name}}Ptr* output) { 59 {{struct.name}}Ptr* output) {
57 if (input) { 60 if (input) {
58 {{struct.name}}Ptr result({{struct.name}}::New()); 61 {{struct.name}}Ptr result({{struct.name}}::New());
59 {%- for pf in struct.packed.packed_fields %} 62 {%- for pf in struct.packed.packed_fields %}
60 {%- if pf.field.kind|is_object_kind %} 63 {%- if pf.field.kind|is_union_kind %}
64 Deserialize_(&input->{{pf.field.name}}, &result->{{pf.field.name}});
65 {%- elif pf.field.kind|is_object_kind %}
61 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}}); 66 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}});
62 {%- elif pf.field.kind|is_interface_kind %} 67 {%- elif pf.field.kind|is_interface_kind %}
63 if (input->{{pf.field.name}}.is_valid()) 68 if (input->{{pf.field.name}}.is_valid())
64 result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::Fetc hAndReset(&input->{{pf.field.name}}))); 69 result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::Fetc hAndReset(&input->{{pf.field.name}})));
65 {%- elif pf.field.kind|is_any_handle_kind %} 70 {%- elif pf.field.kind|is_any_handle_kind %}
66 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.f ield.name}})); 71 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.f ield.name}}));
67 {%- elif pf.field.kind|is_enum_kind %} 72 {%- elif pf.field.kind|is_enum_kind %}
68 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>( 73 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>(
69 input->{{pf.field.name}}); 74 input->{{pf.field.name}});
70 {%- else %} 75 {%- else %}
71 result->{{pf.field.name}} = input->{{pf.field.name}}; 76 result->{{pf.field.name}} = input->{{pf.field.name}};
72 {%- endif %} 77 {%- endif %}
73 {%- endfor %} 78 {%- endfor %}
74 *output = result.Pass(); 79 *output = result.Pass();
75 } else { 80 } else {
76 output->reset(); 81 output->reset();
77 } 82 }
78 } 83 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698