OLD | NEW |
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 {%- set name = pf.field.name -%} | 17 {%- set name = pf.field.name -%} |
18 {%- set kind = pf.field.kind -%} | 18 {%- set kind = pf.field.kind -%} |
19 {%- if kind|is_native_only_kind and kind|is_typemapped_kind %} | 19 {%- if kind|is_native_struct_kind and kind|is_typemapped_kind %} |
20 size += mojo::internal::GetSerializedSizeNative_( | 20 size += mojo::internal::GetSerializedSizeNative_( |
21 {{input_field_pattern|format(name)}}); | 21 {{input_field_pattern|format(name)}}); |
22 {%- elif kind|is_typemapped_kind %} | 22 {%- elif kind|is_typemapped_kind %} |
23 size += | 23 size += |
24 {{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> | 24 {{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> |
25 ::GetSize({{input_field_pattern|format(name)}}); | 25 ::GetSize({{input_field_pattern|format(name)}}); |
26 {%- elif kind|is_union_kind %} | 26 {%- elif kind|is_union_kind %} |
27 size += GetSerializedSize_({{input_field_pattern|format(name)}}, true); | 27 size += GetSerializedSize_({{input_field_pattern|format(name)}}, true); |
28 {%- else %} | 28 {%- else %} |
29 size += GetSerializedSize_({{input_field_pattern|format(name)}}); | 29 size += GetSerializedSize_({{input_field_pattern|format(name)}}); |
(...skipping 17 matching lines...) Expand all Loading... |
47 arguments. #} | 47 arguments. #} |
48 {%- macro serialize(struct, struct_display_name, input_field_pattern, output, bu
ffer) -%} | 48 {%- macro serialize(struct, struct_display_name, input_field_pattern, output, bu
ffer) -%} |
49 internal::{{struct.name}}_Data* {{output}} = | 49 internal::{{struct.name}}_Data* {{output}} = |
50 internal::{{struct.name}}_Data::New({{buffer}}); | 50 internal::{{struct.name}}_Data::New({{buffer}}); |
51 {%- for pf in struct.packed.packed_fields_in_ordinal_order %} | 51 {%- for pf in struct.packed.packed_fields_in_ordinal_order %} |
52 {%- set input_field = input_field_pattern|format(pf.field.name) %} | 52 {%- set input_field = input_field_pattern|format(pf.field.name) %} |
53 {%- set name = pf.field.name %} | 53 {%- set name = pf.field.name %} |
54 {%- set kind = pf.field.kind %} | 54 {%- set kind = pf.field.kind %} |
55 {%- if kind|is_object_kind %} | 55 {%- if kind|is_object_kind %} |
56 {%- if kind|is_array_kind or | 56 {%- if kind|is_array_kind or |
57 (kind|is_native_only_kind and not kind|is_typemapped_kind) %} | 57 (kind|is_native_struct_kind and not kind|is_typemapped_kind) %} |
58 const mojo::internal::ArrayValidateParams {{name}}_validate_params( | 58 const mojo::internal::ArrayValidateParams {{name}}_validate_params( |
59 {{kind|get_array_validate_params_ctor_args|indent(10)}}); | 59 {{kind|get_array_validate_params_ctor_args|indent(10)}}); |
60 mojo::SerializeArray_(std::move({{input_field}}), {{buffer}}, | 60 mojo::SerializeArray_(std::move({{input_field}}), {{buffer}}, |
61 &{{output}}->{{name}}.ptr, &{{name}}_validate_params); | 61 &{{output}}->{{name}}.ptr, &{{name}}_validate_params); |
62 {%- elif kind|is_map_kind %} | 62 {%- elif kind|is_map_kind %} |
63 const mojo::internal::ArrayValidateParams {{name}}_validate_params( | 63 const mojo::internal::ArrayValidateParams {{name}}_validate_params( |
64 {{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}}); | 64 {{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}}); |
65 mojo::SerializeMap_(std::move({{input_field}}), {{buffer}}, | 65 mojo::SerializeMap_(std::move({{input_field}}), {{buffer}}, |
66 &{{output}}->{{name}}.ptr, &{{name}}_validate_params); | 66 &{{output}}->{{name}}.ptr, &{{name}}_validate_params); |
67 {%- elif kind|is_native_only_kind and kind|is_typemapped_kind %} | 67 {%- elif kind|is_native_struct_kind and kind|is_typemapped_kind %} |
68 mojo::internal::SerializeNative_( | 68 mojo::internal::SerializeNative_( |
69 {{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr); | 69 {{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr); |
70 {%- elif kind|is_typemapped_kind %} | 70 {%- elif kind|is_typemapped_kind %} |
71 {{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> | 71 {{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> |
72 ::Serialize({{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr); | 72 ::Serialize({{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr); |
73 {%- elif kind|is_union_kind %} | 73 {%- elif kind|is_union_kind %} |
74 internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}}; | 74 internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}}; |
75 SerializeUnion_(std::move({{input_field}}), {{buffer}}, &{{name}}_ptr, true); | 75 SerializeUnion_(std::move({{input_field}}), {{buffer}}, &{{name}}_ptr, true); |
76 {%- else %} | 76 {%- else %} |
77 Serialize_(std::move({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr); | 77 Serialize_(std::move({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 {%- set last_checked_version = 0 %} | 143 {%- set last_checked_version = 0 %} |
144 {%- for pf in struct.packed.packed_fields_in_ordinal_order %} | 144 {%- for pf in struct.packed.packed_fields_in_ordinal_order %} |
145 {%- set output_field = output_field_pattern|format(pf.field.name) %} | 145 {%- set output_field = output_field_pattern|format(pf.field.name) %} |
146 {%- set name = pf.field.name %} | 146 {%- set name = pf.field.name %} |
147 {%- set kind = pf.field.kind %} | 147 {%- set kind = pf.field.kind %} |
148 {%- if pf.min_version > last_checked_version %} | 148 {%- if pf.min_version > last_checked_version %} |
149 {%- set last_checked_version = pf.min_version %} | 149 {%- set last_checked_version = pf.min_version %} |
150 if ({{input}}->header_.version < {{pf.min_version}}) | 150 if ({{input}}->header_.version < {{pf.min_version}}) |
151 break; | 151 break; |
152 {%- endif %} | 152 {%- endif %} |
153 {%- if kind|is_native_only_kind and kind|is_typemapped_kind %} | 153 {%- if kind|is_native_struct_kind and kind|is_typemapped_kind %} |
154 if (!DeserializeNative_( | 154 if (!DeserializeNative_( |
155 {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) { | 155 {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) { |
156 {{success}} = false; | 156 {{success}} = false; |
157 } | 157 } |
| 158 {%- elif kind|is_native_enum_kind and kind|is_typemapped_kind %} |
| 159 {{output_field}} = static_cast<{{kind|cpp_wrapper_type}}>( |
| 160 {{input}}->{{name}}.value); |
158 {%- elif kind|is_typemapped_kind %} | 161 {%- elif kind|is_typemapped_kind %} |
159 if (!{{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> | 162 if (!{{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> |
160 ::Deserialize( | 163 ::Deserialize( |
161 {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) { | 164 {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) { |
162 {{success}} = false; | 165 {{success}} = false; |
163 } | 166 } |
164 {%- elif kind|is_object_kind %} | 167 {%- elif kind|is_object_kind %} |
165 {%- if kind|is_union_kind %} | 168 {%- if kind|is_union_kind %} |
166 if (!Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}})) | 169 if (!Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}})) |
167 {{success}} = false; | 170 {{success}} = false; |
(...skipping 14 matching lines...) Expand all Loading... |
182 &{{output_field}}, | 185 &{{output_field}}, |
183 ({{context}})->router->CreateLocalEndpointHandle(mojo::internal::FetchAn
dReset(&{{input}}->{{name}}))); | 186 ({{context}})->router->CreateLocalEndpointHandle(mojo::internal::FetchAn
dReset(&{{input}}->{{name}}))); |
184 {%- elif kind|is_enum_kind %} | 187 {%- elif kind|is_enum_kind %} |
185 {{output_field}} = static_cast<{{kind|cpp_wrapper_type}}>({{input}}->{{name}
}.value); | 188 {{output_field}} = static_cast<{{kind|cpp_wrapper_type}}>({{input}}->{{name}
}.value); |
186 {%- else %} | 189 {%- else %} |
187 {{output_field}} = {{input}}->{{name}}; | 190 {{output_field}} = {{input}}->{{name}}; |
188 {%- endif %} | 191 {%- endif %} |
189 {%- endfor %} | 192 {%- endfor %} |
190 } while (false); | 193 } while (false); |
191 {%- endmacro %} | 194 {%- endmacro %} |
OLD | NEW |