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

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

Issue 1475813002: Mojo C++ bindings: support passing associated interface pointers/requests in method parameter lists… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@25_use_multiplex_router
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
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/union_serialization_declaration.tmpl ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 size_t GetSerializedSize_(const {{union.name}}Ptr& input, bool inlined) { 1 size_t GetSerializedSize_(const {{union.name}}Ptr& input, bool inlined) {
2 size_t size = 0U; 2 size_t size = 0U;
3 if (!inlined) { 3 if (!inlined) {
4 size += sizeof(internal::{{union.name}}_Data); 4 size += sizeof(internal::{{union.name}}_Data);
5 } 5 }
6 6
7 if (!input) 7 if (!input)
8 return size; 8 return size;
9 9
10 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get()); 10 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get());
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 87 }
88 } else if (inlined) { 88 } else if (inlined) {
89 result->set_null(); 89 result->set_null();
90 } else { 90 } else {
91 result = nullptr; 91 result = nullptr;
92 } 92 }
93 *output = result; 93 *output = result;
94 } 94 }
95 95
96 void Deserialize_(internal::{{union.name}}_Data* input, 96 void Deserialize_(internal::{{union.name}}_Data* input,
97 {{union.name}}Ptr* output) { 97 {{union.name}}Ptr* output,
98 mojo::internal::SerializationContext* context) {
98 if (input && !input->is_null()) { 99 if (input && !input->is_null()) {
99 {{union.name}}Ptr result({{union.name}}::New()); 100 {{union.name}}Ptr result({{union.name}}::New());
100 mojo::internal::UnionAccessor<{{union.name}}> result_acc(result.get()); 101 mojo::internal::UnionAccessor<{{union.name}}> result_acc(result.get());
101 switch (input->tag) { 102 switch (input->tag) {
102 {% for field in union.fields %} 103 {% for field in union.fields %}
103 case {{union.name}}::Tag::{{field.name|upper}}: { 104 case {{union.name}}::Tag::{{field.name|upper}}: {
104 {% if field.kind|is_object_kind %} 105 {% if field.kind|is_object_kind %}
105 result_acc.SwitchActive({{union.name}}::Tag::{{field.name|upper}}); 106 result_acc.SwitchActive({{union.name}}::Tag::{{field.name|upper}});
106 Deserialize_(input->data.f_{{field.name}}.ptr, result_acc.data()->{{fiel d.name}}); 107 Deserialize_(input->data.f_{{field.name}}.ptr, result_acc.data()->{{fiel d.name}}, context);
107 {% elif field.kind|is_any_handle_kind %} 108 {% elif field.kind|is_any_handle_kind %}
108 {{field.kind|cpp_wrapper_type}}* {{field.name}} = 109 {{field.kind|cpp_wrapper_type}}* {{field.name}} =
109 reinterpret_cast<{{field.kind|cpp_wrapper_type}}*>(&input->data.f_{{ field.name}}); 110 reinterpret_cast<{{field.kind|cpp_wrapper_type}}*>(&input->data.f_{{ field.name}});
110 result->set_{{field.name}}({{field.name}}->Pass()); 111 result->set_{{field.name}}({{field.name}}->Pass());
111 {% elif field.kind|is_interface_kind %} 112 {% elif field.kind|is_interface_kind %}
112 {{field.kind|cpp_wrapper_type}} {{field.name}}_out; 113 {{field.kind|cpp_wrapper_type}} {{field.name}}_out;
113 mojo::internal::Interface_Data* {{field.name}}_in = 114 mojo::internal::Interface_Data* {{field.name}}_in =
114 reinterpret_cast<mojo::internal::Interface_Data*>( 115 reinterpret_cast<mojo::internal::Interface_Data*>(
115 &input->data.f_{{field.name}}); 116 &input->data.f_{{field.name}});
116 mojo::internal::InterfaceDataToPointer( 117 mojo::internal::InterfaceDataToPointer(
117 {{field.name}}_in, &{{field.name}}_out); 118 {{field.name}}_in, &{{field.name}}_out);
118 result->set_{{field.name}}({{field.name}}_out.Pass()); 119 result->set_{{field.name}}({{field.name}}_out.Pass());
119 {%- elif field.kind|is_associated_kind %} 120 {%- elif field.kind|is_associated_kind %}
120 // TODO(yzshen): add deserialization logic for associated kinds. 121 // TODO(yzshen): add deserialization logic for associated kinds.
121 {% elif field.kind|is_enum_kind %} 122 {% elif field.kind|is_enum_kind %}
122 result->set_{{field.name}}(static_cast<{{field.kind|cpp_wrapper_type}}>( input->data.f_{{field.name}})); 123 result->set_{{field.name}}(static_cast<{{field.kind|cpp_wrapper_type}}>( input->data.f_{{field.name}}));
123 {% else %} 124 {% else %}
124 result->set_{{field.name}}(input->data.f_{{field.name}}); 125 result->set_{{field.name}}(input->data.f_{{field.name}});
125 {%- endif %} 126 {%- endif %}
126 break; 127 break;
127 } 128 }
128 {%- endfor %} 129 {%- endfor %}
129 } 130 }
130 *output = result.Pass(); 131 *output = result.Pass();
131 } else { 132 } else {
132 output->reset(); 133 output->reset();
133 } 134 }
134 } 135 }
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/union_serialization_declaration.tmpl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698