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

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

Issue 1518293002: [mojo] Add Mojo bindings support for IPC::ParamTraits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pickle4
Patch Set: Created 5 years 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 {# TODO(yzshen): Make these templates more readable. #} 1 {# TODO(yzshen): Make these templates more readable. #}
2 2
3 {# Computes the serialized size for the specified struct. 3 {# Computes the serialized size for the specified struct.
4 |struct| is the struct definition. 4 |struct| is the struct definition.
5 |input_field_pattern| should be a pattern that contains one string 5 |input_field_pattern| should be a pattern that contains one string
6 placeholder, for example, "input->%s", "p_%s". The placeholder will be 6 placeholder, for example, "input->%s", "p_%s". The placeholder will be
7 substituted with struct field names to refer to the input fields. 7 substituted with struct field names to refer to the input fields.
8 This macro is expanded to compute seriailized size for both: 8 This macro is expanded to compute seriailized size for both:
9 - user-defined structs: the input is an instance of the corresponding struct 9 - user-defined structs: the input is an instance of the corresponding struct
10 wrapper class. 10 wrapper class.
11 - method parameters/response parameters: the input is a list of 11 - method parameters/response parameters: the input is a list of
12 arguments. 12 arguments.
13 It declares |size| of type size_t to store the resulting size. #} 13 It declares |size| of type size_t to store the resulting size. #}
14 {%- macro get_serialized_size(struct, input_field_pattern) -%} 14 {%- macro get_serialized_size(struct, input_field_pattern) -%}
15 size_t size = sizeof(internal::{{struct.name}}_Data); 15 size_t size = sizeof(internal::{{struct.name}}_Data);
16 {%- for pf in struct.packed.packed_fields_in_ordinal_order if pf.field.kind|is _object_kind %} 16 {%- for pf in struct.packed.packed_fields_in_ordinal_order if pf.field.kind|is _object_kind %}
17 {%- if pf.field.kind|is_union_kind %} 17 {%- if pf.field.kind|is_union_kind %}
18 size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}, true ); 18 size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}, true );
19 {%- elif pf.field.kind|is_native_kind %}
20 // TODO(rockot): Support sizing of native kinds. This requires adding support
21 // to IPC::ParamTraits. It's not checked and is only used for preallocating
22 // space, so for now we just short the size result and let the buffer grow
23 // a little dynamically when needed.
19 {%- else %} 24 {%- else %}
20 size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}); 25 size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}});
21 {%- endif %} 26 {%- endif %}
22 {%- endfor %} 27 {%- endfor %}
23 {%- endmacro -%} 28 {%- endmacro -%}
24 29
25 {# Serializes the specified struct. 30 {# Serializes the specified struct.
26 |struct| is the struct definition. 31 |struct| is the struct definition.
27 |struct_display_name| is the display name for the struct that can be showed 32 |struct_display_name| is the display name for the struct that can be showed
28 in error/log messages, for example, "FooStruct", "FooMethod request". 33 in error/log messages, for example, "FooStruct", "FooMethod request".
(...skipping 21 matching lines...) Expand all
50 mojo::SerializeArray_(std::move({{input_field}}), {{buffer}}, 55 mojo::SerializeArray_(std::move({{input_field}}), {{buffer}},
51 &{{output}}->{{name}}.ptr, &{{name}}_validate_params); 56 &{{output}}->{{name}}.ptr, &{{name}}_validate_params);
52 {%- elif kind|is_map_kind %} 57 {%- elif kind|is_map_kind %}
53 const mojo::internal::ArrayValidateParams {{name}}_validate_params( 58 const mojo::internal::ArrayValidateParams {{name}}_validate_params(
54 {{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}}); 59 {{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}});
55 mojo::SerializeMap_(std::move({{input_field}}), {{buffer}}, 60 mojo::SerializeMap_(std::move({{input_field}}), {{buffer}},
56 &{{output}}->{{name}}.ptr, &{{name}}_validate_params); 61 &{{output}}->{{name}}.ptr, &{{name}}_validate_params);
57 {%- elif kind|is_union_kind %} 62 {%- elif kind|is_union_kind %}
58 internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}}; 63 internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}};
59 SerializeUnion_(std::move({{input_field}}), {{buffer}}, &{{name}}_ptr, true); 64 SerializeUnion_(std::move({{input_field}}), {{buffer}}, &{{name}}_ptr, true);
65 {%- elif kind|is_native_kind %}
66 mojo::internal::SerializeNative_(
67 {{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr);
60 {%- else %} 68 {%- else %}
61 Serialize_(std::move({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr); 69 Serialize_(std::move({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr);
62 {%- endif %} 70 {%- endif %}
63 {%- if not kind|is_nullable_kind %} 71 {%- if not kind|is_nullable_kind %}
64 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 72 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
65 {%- if kind|is_union_kind %} 73 {%- if kind|is_union_kind %}
66 {{output}}->{{name}}.is_null(), 74 {{output}}->{{name}}.is_null(),
67 {%- else %} 75 {%- else %}
68 !{{output}}->{{name}}.ptr, 76 !{{output}}->{{name}}.ptr,
69 {%- endif %} 77 {%- endif %}
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 {%- set output_field = output_field_pattern|format(pf.field.name) %} 134 {%- set output_field = output_field_pattern|format(pf.field.name) %}
127 {%- set name = pf.field.name %} 135 {%- set name = pf.field.name %}
128 {%- set kind = pf.field.kind %} 136 {%- set kind = pf.field.kind %}
129 {%- if pf.min_version > last_checked_version %} 137 {%- if pf.min_version > last_checked_version %}
130 {%- set last_checked_version = pf.min_version %} 138 {%- set last_checked_version = pf.min_version %}
131 if ({{input}}->header_.version < {{pf.min_version}}) 139 if ({{input}}->header_.version < {{pf.min_version}})
132 break; 140 break;
133 {%- endif %} 141 {%- endif %}
134 {%- if kind|is_object_kind %} 142 {%- if kind|is_object_kind %}
135 {%- if kind|is_union_kind %} 143 {%- if kind|is_union_kind %}
136 Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}}); 144 if (!Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}}))
145 return false;
146 {%- elif kind|is_native_kind %}
147 if (!DeserializeNative_(
148 {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) {
149 return false;
150 }
137 {%- else %} 151 {%- else %}
138 Deserialize_({{input}}->{{name}}.ptr, &{{output_field}}, {{context}}); 152 if (!Deserialize_({{input}}->{{name}}.ptr, &{{output_field}}, {{context}}))
153 return false;
139 {%- endif %} 154 {%- endif %}
140 {%- elif kind|is_interface_kind %} 155 {%- elif kind|is_interface_kind %}
141 mojo::internal::InterfaceDataToPointer(&{{input}}->{{name}}, &{{output_field }}); 156 mojo::internal::InterfaceDataToPointer(&{{input}}->{{name}}, &{{output_field }});
142 {%- elif kind|is_interface_request_kind %} 157 {%- elif kind|is_interface_request_kind %}
143 {{output_field}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(& {{input}}->{{name}}))); 158 {{output_field}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(& {{input}}->{{name}})));
144 {%- elif kind|is_any_handle_kind %} 159 {%- elif kind|is_any_handle_kind %}
145 {{output_field}}.reset(mojo::internal::FetchAndReset(&{{input}}->{{name}})); 160 {{output_field}}.reset(mojo::internal::FetchAndReset(&{{input}}->{{name}}));
146 {%- elif kind|is_associated_interface_kind %} 161 {%- elif kind|is_associated_interface_kind %}
147 mojo::internal::AssociatedInterfaceDataToPtrInfo(&{{input}}->{{name}}, &{{ou tput_field}}, ({{context}})->router.get()); 162 mojo::internal::AssociatedInterfaceDataToPtrInfo(&{{input}}->{{name}}, &{{ou tput_field}}, ({{context}})->router.get());
148 {%- elif kind|is_associated_interface_request_kind %} 163 {%- elif kind|is_associated_interface_request_kind %}
149 mojo::internal::AssociatedInterfaceRequestHelper::SetHandle( 164 mojo::internal::AssociatedInterfaceRequestHelper::SetHandle(
150 &{{output_field}}, 165 &{{output_field}},
151 ({{context}})->router->CreateLocalEndpointHandle(mojo::internal::FetchAn dReset(&{{input}}->{{name}}))); 166 ({{context}})->router->CreateLocalEndpointHandle(mojo::internal::FetchAn dReset(&{{input}}->{{name}})));
152 {%- elif kind|is_enum_kind %} 167 {%- elif kind|is_enum_kind %}
153 {{output_field}} = static_cast<{{kind|cpp_wrapper_type}}>({{input}}->{{name} }); 168 {{output_field}} = static_cast<{{kind|cpp_wrapper_type}}>({{input}}->{{name} });
154 {%- else %} 169 {%- else %}
155 {{output_field}} = {{input}}->{{name}}; 170 {{output_field}} = {{input}}->{{name}};
156 {%- endif %} 171 {%- endif %}
157 {%- endfor %} 172 {%- endfor %}
158 } while (false); 173 } while (false);
159 {%- endmacro %} 174 {%- endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698