OLD | NEW |
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 } |
OLD | NEW |