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

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

Powered by Google App Engine
This is Rietveld 408576698