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

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

Issue 294833002: Mojo: more idiomatic C++ bindings (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: serialization Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 {%- import "interface_macros.tmpl" as interface_macros %} 1 {%- import "interface_macros.tmpl" as interface_macros %}
2 {%- set class_name = interface.name %} 2 {%- set class_name = interface.name %}
3 {%- set proxy_name = interface.name ~ "Proxy" %} 3 {%- set proxy_name = interface.name ~ "Proxy" %}
4 4
5 {%- macro alloc_params(parameters) %}
6 {%- for param in parameters %}
7 {%- if param.kind|is_object_kind %}
8 {{param.kind|cpp_result_type}} p{{loop.index}};
9 if (params->{{param.name}}())
10 Deserialize_(params->{{param.name}}(), &p{{loop.index}});
11 {% endif -%}
12 {%- endfor %}
13 {%- endmacro %}
14
5 {%- macro pass_params(parameters) %} 15 {%- macro pass_params(parameters) %}
6 {%- for param in parameters %} 16 {%- for param in parameters %}
7 {%- if param.kind|is_object_kind -%} 17 {%- if param.kind|is_string_kind -%}
8 mojo::internal::Wrap(params->{{param.name}}()) 18 p{{loop.index}}
19 {%- elif param.kind|is_object_kind -%}
20 p{{loop.index}}.Pass()
9 {%- elif param.kind|is_interface_kind -%} 21 {%- elif param.kind|is_interface_kind -%}
10 mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}() ).Pass()) 22 mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}() ).Pass())
11 {%- elif param.kind|is_handle_kind -%} 23 {%- elif param.kind|is_handle_kind -%}
12 mojo::MakePassable(params->{{param.name}}()).Pass() 24 mojo::MakePassable(params->{{param.name}}()).Pass()
13 {%- elif param.kind|is_enum_kind -%} 25 {%- elif param.kind|is_enum_kind -%}
14 static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}}()) 26 static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}}())
15 {%- else -%} 27 {%- else -%}
16 params->{{param.name}}() 28 params->{{param.name}}()
17 {%- endif -%} 29 {%- endif -%}
18 {%- if not loop.last %}, {% endif %} 30 {%- if not loop.last %}, {% endif %}
19 {%- endfor %} 31 {%- endfor %}
20 {%- endmacro %} 32 {%- endmacro %}
21 33
22 {%- macro compute_payload_size(params_name, parameters) -%} 34 {%- macro compute_payload_size(params_name, parameters) -%}
23 size_t payload_size = 35 size_t payload_size =
24 mojo::internal::Align(sizeof({{params_name}})); 36 mojo::internal::Align(sizeof({{params_name}}));
25 {#--- Computes #} 37 {#--- Computes #}
26 {%- for param in parameters %} 38 {%- for param in parameters %}
27 {%- if param.kind|is_object_kind %} 39 {%- if param.kind|is_object_kind %}
28 if (!in_{{param.name}}.is_null()) 40 if (in_{{param.name}})
29 payload_size += mojo::internal::Unwrap(in_{{param.name}})->ComputeSize(); 41 payload_size += GetSerializedSize_(in_{{param.name}});
30 {%- endif %} 42 {%- endif %}
31 {%- endfor %} 43 {%- endfor %}
32 {%- endmacro %} 44 {%- endmacro %}
33 45
34 {%- macro build_message(params_name, parameters) -%} 46 {%- macro build_message(params_name, parameters) -%}
35 {{params_name}}* params = 47 {{params_name}}* params =
36 {{params_name}}::New(builder.buffer()); 48 {{params_name}}::New(builder.buffer());
37 {#--- Sets #} 49 {#--- Sets #}
38 {% for param in parameters %} 50 {% for param in parameters %}
39 {%- if param.kind|is_object_kind %} 51 {%- if param.kind|is_object_kind %}
40 if (!in_{{param.name}}.is_null()) 52 if (in_{{param.name}}) {
41 params->set_{{param.name}}( 53 {{param.kind|cpp_type}} tmp;
42 mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer())); 54 Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &tm p);
55 params->set_{{param.name}}(tmp);
56 }
43 {%- elif param.kind|is_interface_kind %} 57 {%- elif param.kind|is_interface_kind %}
44 if (!in_{{param.name}}.get()) { 58 if (!in_{{param.name}}.get()) {
45 params->set_{{param.name}}(mojo::MessagePipeHandle()); 59 params->set_{{param.name}}(mojo::MessagePipeHandle());
46 } else { 60 } else {
47 // Delegate handle. 61 // Delegate handle.
48 params->set_{{param.name}}( 62 params->set_{{param.name}}(
49 in_{{param.name}}.ResetAndReturnMessagePipe().release()); 63 in_{{param.name}}.ResetAndReturnMessagePipe().release());
50 } 64 }
51 {%- elif param.kind|is_handle_kind %} 65 {%- elif param.kind|is_handle_kind %}
52 params->set_{{param.name}}(in_{{param.name}}.release()); 66 params->set_{{param.name}}(in_{{param.name}}.release());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback ); 102 MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback );
89 }; 103 };
90 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( 104 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
91 mojo::Message* message) { 105 mojo::Message* message) {
92 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = 106 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params =
93 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( 107 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>(
94 message->mutable_payload()); 108 message->mutable_payload());
95 109
96 if (!params->DecodePointersAndHandles(message)) 110 if (!params->DecodePointersAndHandles(message))
97 return false; 111 return false;
112 {{alloc_params(method.response_parameters)|indent(2)}}
98 callback_.Run({{pass_params(method.response_parameters)}}); 113 callback_.Run({{pass_params(method.response_parameters)}});
99 params->CloseHandles(); 114 params->CloseHandles();
100 return true; 115 return true;
101 } 116 }
102 {%- endif %} 117 {%- endif %}
103 {%- endfor %} 118 {%- endfor %}
104 119
105 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiver* receiver) 120 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiver* receiver)
106 : receiver_(receiver) { 121 : receiver_(receiver) {
107 } 122 }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 switch (message->header()->name) { 208 switch (message->header()->name) {
194 {%- for method in interface.methods %} 209 {%- for method in interface.methods %}
195 case internal::k{{class_name}}_{{method.name}}_Name: { 210 case internal::k{{class_name}}_{{method.name}}_Name: {
196 {%- if method.response_parameters == None %} 211 {%- if method.response_parameters == None %}
197 internal::{{class_name}}_{{method.name}}_Params_Data* params = 212 internal::{{class_name}}_{{method.name}}_Params_Data* params =
198 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 213 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
199 message->mutable_payload()); 214 message->mutable_payload());
200 215
201 if (!params->DecodePointersAndHandles(message)) 216 if (!params->DecodePointersAndHandles(message))
202 return false; 217 return false;
218 {{alloc_params(method.parameters)|indent(6)}}
203 sink_->{{method.name}}({{pass_params(method.parameters)}}); 219 sink_->{{method.name}}({{pass_params(method.parameters)}});
204 params->CloseHandles(); 220 params->CloseHandles();
205 return true; 221 return true;
206 {%- else %} 222 {%- else %}
207 break; 223 break;
208 {%- endif %} 224 {%- endif %}
209 } 225 }
210 {%- endfor %} 226 {%- endfor %}
211 } 227 }
212 {%- endif %} 228 {%- endif %}
(...skipping 10 matching lines...) Expand all
223 internal::{{class_name}}_{{method.name}}_Params_Data* params = 239 internal::{{class_name}}_{{method.name}}_Params_Data* params =
224 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 240 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
225 message->mutable_payload()); 241 message->mutable_payload());
226 242
227 if (!params->DecodePointersAndHandles(message)) 243 if (!params->DecodePointersAndHandles(message))
228 return false; 244 return false;
229 {{interface_macros.declare_callback(method)}}::Runnable* runnable = 245 {{interface_macros.declare_callback(method)}}::Runnable* runnable =
230 new {{class_name}}_{{method.name}}_ProxyToResponder( 246 new {{class_name}}_{{method.name}}_ProxyToResponder(
231 message->request_id(), responder); 247 message->request_id(), responder);
232 {{interface_macros.declare_callback(method)}} callback(runnable); 248 {{interface_macros.declare_callback(method)}} callback(runnable);
249 {{alloc_params(method.parameters)|indent(6)}}
233 sink_->{{method.name}}( 250 sink_->{{method.name}}(
234 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back); 251 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back);
235 params->CloseHandles(); 252 params->CloseHandles();
236 return true; 253 return true;
237 {%- else %} 254 {%- else %}
238 break; 255 break;
239 {%- endif %} 256 {%- endif %}
240 } 257 }
241 {%- endfor %} 258 {%- endfor %}
242 } 259 }
(...skipping 16 matching lines...) Expand all
259 {% if interface|has_callbacks %} 276 {% if interface|has_callbacks %}
260 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 277 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
261 mojo::MessageReceiver* sink) : MessageFilter(sink) { 278 mojo::MessageReceiver* sink) : MessageFilter(sink) {
262 } 279 }
263 280
264 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 281 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
265 // TODO(yzshen): implement validation logic. 282 // TODO(yzshen): implement validation logic.
266 return sink_->Accept(message); 283 return sink_->Accept(message);
267 } 284 }
268 {%- endif -%} 285 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698