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

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

Powered by Google App Engine
This is Rietveld 408576698