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

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

Issue 2112093002: Mojo C++ bindings: Merge EncodePointers/DecodePointers into Serialize/Deserialize, respectively. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@61_array_fix
Patch Set: . Created 4 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
OLDNEW
1 {%- set mojom_type = union|get_qualified_name_for_kind %} 1 {%- set mojom_type = union|get_qualified_name_for_kind %}
2 {%- set data_type = union|get_qualified_name_for_kind(internal=True) %} 2 {%- set data_type = union|get_qualified_name_for_kind(internal=True) %}
3 3
4 namespace internal { 4 namespace internal {
5 5
6 // static 6 // static
7 size_t UnionSerializerImpl<{{mojom_type}}Ptr>::PrepareToSerialize( 7 size_t UnionSerializerImpl<{{mojom_type}}Ptr>::PrepareToSerialize(
8 {{mojom_type}}Ptr& input, 8 {{mojom_type}}Ptr& input,
9 bool inlined, 9 bool inlined,
10 SerializationContext* context) { 10 SerializationContext* context) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 UnionAccessor<{{mojom_type}}> input_acc(input.get()); 49 UnionAccessor<{{mojom_type}}> input_acc(input.get());
50 // TODO(azani): Handle unknown and objects. 50 // TODO(azani): Handle unknown and objects.
51 // Set the not-null flag. 51 // Set the not-null flag.
52 result->size = 16; 52 result->size = 16;
53 result->tag = input->which(); 53 result->tag = input->which();
54 switch (input->which()) { 54 switch (input->which()) {
55 {%- for field in union.fields %} 55 {%- for field in union.fields %}
56 case {{mojom_type}}::Tag::{{field.name|upper}}: { 56 case {{mojom_type}}::Tag::{{field.name|upper}}: {
57 {%- set serializer_type = field.kind|unmapped_type_for_serializer %} 57 {%- set serializer_type = field.kind|unmapped_type_for_serializer %}
58 {%- if field.kind|is_object_kind %} 58 {%- if field.kind|is_object_kind %}
59 typename decltype(result->data.f_{{field.name}})::BaseType* ptr;
59 {%- if field.kind|is_union_kind %} 60 {%- if field.kind|is_union_kind %}
60 mojo::internal::Serialize<{{serializer_type}}>( 61 mojo::internal::Serialize<{{serializer_type}}>(
61 *(input_acc.data()->{{field.name}}), buf, 62 *(input_acc.data()->{{field.name}}), buf, &ptr, false, context);
62 &result->data.f_{{field.name}}.ptr, false, context);
63 {%- elif field.kind|is_array_kind or field.kind|is_map_kind %} 63 {%- elif field.kind|is_array_kind or field.kind|is_map_kind %}
64 const ContainerValidateParams {{field.name}}_validate_params( 64 const ContainerValidateParams {{field.name}}_validate_params(
65 {{field.kind|get_container_validate_params_ctor_args|indent(16)}}); 65 {{field.kind|get_container_validate_params_ctor_args|indent(16)}});
66 mojo::internal::Serialize<{{serializer_type}}>( 66 mojo::internal::Serialize<{{serializer_type}}>(
67 *(input_acc.data()->{{field.name}}), buf, 67 *(input_acc.data()->{{field.name}}), buf, &ptr,
68 &result->data.f_{{field.name}}.ptr, &{{field.name}}_validate_params, 68 &{{field.name}}_validate_params, context);
69 context);
70 {%- else %} 69 {%- else %}
71 mojo::internal::Serialize<{{serializer_type}}>( 70 mojo::internal::Serialize<{{serializer_type}}>(
72 *(input_acc.data()->{{field.name}}), buf, 71 *(input_acc.data()->{{field.name}}), buf, &ptr, context);
73 &result->data.f_{{field.name}}.ptr, context);
74 {%- endif %} 72 {%- endif %}
73 result->data.f_{{field.name}}.Set(ptr);
75 {%- if not field.kind|is_nullable_kind %} 74 {%- if not field.kind|is_nullable_kind %}
76 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 75 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
77 !result->data.f_{{field.name}}.ptr, 76 !ptr, mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
78 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
79 "null {{field.name}} in {{union.name}} union"); 77 "null {{field.name}} in {{union.name}} union");
80 {%- endif %} 78 {%- endif %}
81 79
82 {%- elif field.kind|is_any_handle_or_interface_kind %} 80 {%- elif field.kind|is_any_handle_or_interface_kind %}
83 mojo::internal::Serialize<{{serializer_type}}>( 81 mojo::internal::Serialize<{{serializer_type}}>(
84 *input_acc.data()->{{field.name}}, &result->data.f_{{field.name}}, 82 *input_acc.data()->{{field.name}}, &result->data.f_{{field.name}},
85 context); 83 context);
86 {%- if not field.kind|is_nullable_kind %} 84 {%- if not field.kind|is_nullable_kind %}
87 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 85 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
88 !mojo::internal::IsHandleOrInterfaceValid(result->data.f_{{field.nam e}}), 86 !mojo::internal::IsHandleOrInterfaceValid(result->data.f_{{field.nam e}}),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 if (input && !input->is_null()) { 120 if (input && !input->is_null()) {
123 {{mojom_type}}Ptr result({{mojom_type}}::New()); 121 {{mojom_type}}Ptr result({{mojom_type}}::New());
124 UnionAccessor<{{mojom_type}}> result_acc(result.get()); 122 UnionAccessor<{{mojom_type}}> result_acc(result.get());
125 switch (input->tag) { 123 switch (input->tag) {
126 {%- for field in union.fields %} 124 {%- for field in union.fields %}
127 case {{mojom_type}}::Tag::{{field.name|upper}}: { 125 case {{mojom_type}}::Tag::{{field.name|upper}}: {
128 {%- set serializer_type = field.kind|unmapped_type_for_serializer %} 126 {%- set serializer_type = field.kind|unmapped_type_for_serializer %}
129 {%- if field.kind|is_object_kind %} 127 {%- if field.kind|is_object_kind %}
130 result_acc.SwitchActive({{mojom_type}}::Tag::{{field.name|upper}}); 128 result_acc.SwitchActive({{mojom_type}}::Tag::{{field.name|upper}});
131 if (!mojo::internal::Deserialize<{{serializer_type}}>( 129 if (!mojo::internal::Deserialize<{{serializer_type}}>(
132 input->data.f_{{field.name}}.ptr, 130 input->data.f_{{field.name}}.Get(),
133 result_acc.data()->{{field.name}}, context)) 131 result_acc.data()->{{field.name}}, context))
134 success = false; 132 success = false;
135 133
136 {%- elif field.kind|is_any_handle_or_interface_kind %} 134 {%- elif field.kind|is_any_handle_or_interface_kind %}
137 typename std::remove_reference< 135 typename std::remove_reference<
138 decltype(result->get_{{field.name}}())>::type result_{{field.name}}; 136 decltype(result->get_{{field.name}}())>::type result_{{field.name}};
139 bool ret = mojo::internal::Deserialize<{{serializer_type}}>( 137 bool ret = mojo::internal::Deserialize<{{serializer_type}}>(
140 &input->data.f_{{field.name}}, &result_{{field.name}}, context); 138 &input->data.f_{{field.name}}, &result_{{field.name}}, context);
141 DCHECK(ret); 139 DCHECK(ret);
142 result->set_{{field.name}}(std::move(result_{{field.name}})); 140 result->set_{{field.name}}(std::move(result_{{field.name}}));
(...skipping 14 matching lines...) Expand all
157 {%- endfor %} 155 {%- endfor %}
158 } 156 }
159 *output = std::move(result); 157 *output = std::move(result);
160 } else { 158 } else {
161 output->reset(); 159 output->reset();
162 } 160 }
163 return success; 161 return success;
164 } 162 }
165 163
166 } // namespace internal 164 } // namespace internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698