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

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

Issue 376383002: Mojo: Add support for InterfacePtr as a struct member (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: retry Created 6 years, 5 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 | Annotate | Revision Log
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_object_kind %}
18 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result-> {{pf.field.name}}.ptr); 18 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result-> {{pf.field.name}}.ptr);
19 {%- elif pf.field.kind|is_interface_kind %}
20 result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().relea se();
19 {%- elif pf.field.kind|is_handle_kind %} 21 {%- elif pf.field.kind|is_handle_kind %}
20 result->{{pf.field.name}} = input->{{pf.field.name}}.release(); 22 result->{{pf.field.name}} = input->{{pf.field.name}}.release();
21 {%- else %} 23 {%- else %}
22 result->{{pf.field.name}} = input->{{pf.field.name}}; 24 result->{{pf.field.name}} = input->{{pf.field.name}};
23 {%- endif %} 25 {%- endif %}
24 {%- endfor %} 26 {%- endfor %}
25 *output = result; 27 *output = result;
26 } else { 28 } else {
27 *output = NULL; 29 *output = NULL;
28 } 30 }
29 } 31 }
30 32
31 void Deserialize_(internal::{{struct.name}}_Data* input, 33 void Deserialize_(internal::{{struct.name}}_Data* input,
32 {{struct.name}}Ptr* output) { 34 {{struct.name}}Ptr* output) {
33 if (input) { 35 if (input) {
34 {{struct.name}}Ptr result({{struct.name}}::New()); 36 {{struct.name}}Ptr result({{struct.name}}::New());
35 {%- for pf in struct.packed.packed_fields %} 37 {%- for pf in struct.packed.packed_fields %}
36 {%- if pf.field.kind|is_object_kind %} 38 {%- if pf.field.kind|is_object_kind %}
37 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}}); 39 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}});
40 {%- elif pf.field.kind|is_interface_kind %}
41 if (input->{{pf.field.name}}.is_valid())
42 result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::Fetc hAndReset(&input->{{pf.field.name}})));
38 {%- elif pf.field.kind|is_handle_kind %} 43 {%- elif pf.field.kind|is_handle_kind %}
39 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.f ield.name}})); 44 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.f ield.name}}));
40 {%- elif pf.field.kind|is_enum_kind %} 45 {%- elif pf.field.kind|is_enum_kind %}
41 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>( 46 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>(
42 input->{{pf.field.name}}); 47 input->{{pf.field.name}});
43 {%- else %} 48 {%- else %}
44 result->{{pf.field.name}} = input->{{pf.field.name}}; 49 result->{{pf.field.name}} = input->{{pf.field.name}};
45 {%- endif %} 50 {%- endif %}
46 {%- endfor %} 51 {%- endfor %}
47 *output = result.Pass(); 52 *output = result.Pass();
48 } else { 53 } else {
49 output->reset(); 54 output->reset();
50 } 55 }
51 } 56 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698