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

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

Issue 611633002: mojom: Add associative arrays to the mojom language. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix gn build. Created 6 years, 2 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_object_kind %}
18 {%- if pf.field.kind|is_any_array_kind %} 18 {%- if pf.field.kind|is_any_array_kind %}
19 mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}} >( 19 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); 20 mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.fi eld.name}}.ptr);
21 {%- elif pf.field.kind|is_map_kind %}
22 mojo::Array<{{pf.field.kind.key_kind|cpp_result_type}}> {{pf.field.name}}_ke ys;
23 mojo::Array<{{pf.field.kind.value_kind|cpp_result_type}}> {{pf.field.name}}_ values;
24 input->{{pf.field.name}}.DecomposeMapTo(&{{pf.field.name}}_keys,
25 &{{pf.field.name}}_values);
26
27 mojo::SerializeArray_<{{pf.field.kind.key_kind|get_map_validate_params|inden t(26)}}>(
28 mojo::internal::Forward({{pf.field.name}}_keys), buf, &result->{{pf.fiel d.name}}_keys.ptr);
29 mojo::SerializeArray_<{{pf.field.kind.value_kind|get_map_validate_params|ind ent(26)}}>(
30 mojo::internal::Forward({{pf.field.name}}_values), buf, &result->{{pf.fi eld.name}}_values.ptr);
21 {%- else %} 31 {%- else %}
22 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result-> {{pf.field.name}}.ptr); 32 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result-> {{pf.field.name}}.ptr);
23 {%- endif %} 33 {%- endif %}
24 {%- if not pf.field.kind|is_nullable_kind %} 34 {%- if not pf.field.kind|is_nullable_kind %}
35 {%- if pf.field.kind|is_map_kind %}
36 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
37 !result->{{pf.field.name}}_keys.ptr,
38 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
39 "null key array for {{pf.field.name}} field in {{struct.name}} struct");
40 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
41 !result->{{pf.field.name}}_values.ptr,
42 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
43 "null value array for {{pf.field.name}} field in {{struct.name}} struct" );
44 {%- else %}
25 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 45 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
26 !result->{{pf.field.name}}.ptr, 46 !result->{{pf.field.name}}.ptr,
27 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, 47 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
28 "null {{pf.field.name}} field in {{struct.name}} struct"); 48 "null {{pf.field.name}} field in {{struct.name}} struct");
49 {%- endif %}
29 {%- endif %} 50 {%- endif %}
30 {%- elif pf.field.kind|is_any_handle_kind %} 51 {%- elif pf.field.kind|is_any_handle_kind %}
31 {%- if pf.field.kind|is_interface_kind %} 52 {%- if pf.field.kind|is_interface_kind %}
32 result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().relea se(); 53 result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().relea se();
33 {%- else %} 54 {%- else %}
34 result->{{pf.field.name}} = input->{{pf.field.name}}.release(); 55 result->{{pf.field.name}} = input->{{pf.field.name}}.release();
35 {%- endif %} 56 {%- endif %}
36 {%- if not pf.field.kind|is_nullable_kind %} 57 {%- if not pf.field.kind|is_nullable_kind %}
37 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 58 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
38 !result->{{pf.field.name}}.is_valid(), 59 !result->{{pf.field.name}}.is_valid(),
39 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, 60 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE,
40 "invalid {{pf.field.name}} field in {{struct.name}} struct"); 61 "invalid {{pf.field.name}} field in {{struct.name}} struct");
41 {%- endif %} 62 {%- endif %}
42 {%- else %} 63 {%- else %}
43 result->{{pf.field.name}} = input->{{pf.field.name}}; 64 result->{{pf.field.name}} = input->{{pf.field.name}};
44 {%- endif %} 65 {%- endif %}
45 {%- endfor %} 66 {%- endfor %}
46 *output = result; 67 *output = result;
47 } else { 68 } else {
48 *output = nullptr; 69 *output = nullptr;
49 } 70 }
50 } 71 }
51 72
52 void Deserialize_(internal::{{struct.name}}_Data* input, 73 void Deserialize_(internal::{{struct.name}}_Data* input,
53 {{struct.name}}Ptr* output) { 74 {{struct.name}}Ptr* output) {
54 if (input) { 75 if (input) {
55 {{struct.name}}Ptr result({{struct.name}}::New()); 76 {{struct.name}}Ptr result({{struct.name}}::New());
56 {%- for pf in struct.packed.packed_fields %} 77 {%- for pf in struct.packed.packed_fields %}
57 {%- if pf.field.kind|is_object_kind %} 78 {%- if pf.field.kind|is_map_kind %}
79 mojo::Array<{{pf.field.kind.key_kind|cpp_result_type}}> {{pf.field.name}}_ke ys;
80 Deserialize_(input->{{pf.field.name}}_keys.ptr, &{{pf.field.name}}_keys);
81 mojo::Array<{{pf.field.kind.value_kind|cpp_result_type}}> {{pf.field.name}}_ values;
82 Deserialize_(input->{{pf.field.name}}_values.ptr, &{{pf.field.name}}_values) ;
83 result->{{pf.field.name}} =
84 mojo::Map<{{pf.field.kind.key_kind|cpp_result_type}},
85 {{pf.field.kind.value_kind|cpp_result_type}}>(
86 {{pf.field.name}}_keys.Pass(),
87 {{pf.field.name}}_values.Pass()).Pass();
88 {%- elif pf.field.kind|is_object_kind %}
58 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}}); 89 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}});
59 {%- elif pf.field.kind|is_interface_kind %} 90 {%- elif pf.field.kind|is_interface_kind %}
60 if (input->{{pf.field.name}}.is_valid()) 91 if (input->{{pf.field.name}}.is_valid())
61 result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::Fetc hAndReset(&input->{{pf.field.name}}))); 92 result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::Fetc hAndReset(&input->{{pf.field.name}})));
62 {%- elif pf.field.kind|is_any_handle_kind %} 93 {%- elif pf.field.kind|is_any_handle_kind %}
63 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.f ield.name}})); 94 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.f ield.name}}));
64 {%- elif pf.field.kind|is_enum_kind %} 95 {%- elif pf.field.kind|is_enum_kind %}
65 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>( 96 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>(
66 input->{{pf.field.name}}); 97 input->{{pf.field.name}});
67 {%- else %} 98 {%- else %}
68 result->{{pf.field.name}} = input->{{pf.field.name}}; 99 result->{{pf.field.name}} = input->{{pf.field.name}};
69 {%- endif %} 100 {%- endif %}
70 {%- endfor %} 101 {%- endfor %}
71 *output = result.Pass(); 102 *output = result.Pass();
72 } else { 103 } else {
73 output->reset(); 104 output->reset();
74 } 105 }
75 } 106 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698