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

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: rebase 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 17 matching lines...) Expand all
82 MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback ); 90 MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback );
83 }; 91 };
84 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( 92 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
85 mojo::Message* message) { 93 mojo::Message* message) {
86 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = 94 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params =
87 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( 95 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>(
88 message->mutable_payload()); 96 message->mutable_payload());
89 97
90 if (!params->DecodePointersAndHandles(message)) 98 if (!params->DecodePointersAndHandles(message))
91 return false; 99 return false;
100 {{alloc_params(method.response_parameters)|indent(2)}}
92 callback_.Run({{pass_params(method.response_parameters)}}); 101 callback_.Run({{pass_params(method.response_parameters)}});
93 params->CloseHandles();
94 return true; 102 return true;
95 } 103 }
96 {%- endif %} 104 {%- endif %}
97 {%- endfor %} 105 {%- endfor %}
98 106
99 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) 107 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver)
100 : receiver_(receiver) { 108 : receiver_(receiver) {
101 } 109 }
102 110
103 {#--- Proxy definitions #} 111 {#--- Proxy definitions #}
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 switch (message->header()->name) { 195 switch (message->header()->name) {
188 {%- for method in interface.methods %} 196 {%- for method in interface.methods %}
189 case internal::k{{class_name}}_{{method.name}}_Name: { 197 case internal::k{{class_name}}_{{method.name}}_Name: {
190 {%- if method.response_parameters == None %} 198 {%- if method.response_parameters == None %}
191 internal::{{class_name}}_{{method.name}}_Params_Data* params = 199 internal::{{class_name}}_{{method.name}}_Params_Data* params =
192 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 200 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
193 message->mutable_payload()); 201 message->mutable_payload());
194 202
195 if (!params->DecodePointersAndHandles(message)) 203 if (!params->DecodePointersAndHandles(message))
196 return false; 204 return false;
205 {{alloc_params(method.parameters)|indent(6)}}
197 sink_->{{method.name}}({{pass_params(method.parameters)}}); 206 sink_->{{method.name}}({{pass_params(method.parameters)}});
198 params->CloseHandles();
199 return true; 207 return true;
200 {%- else %} 208 {%- else %}
201 break; 209 break;
202 {%- endif %} 210 {%- endif %}
203 } 211 }
204 {%- endfor %} 212 {%- endfor %}
205 } 213 }
206 {%- endif %} 214 {%- endif %}
207 return false; 215 return false;
208 } 216 }
209 217
210 bool {{class_name}}Stub::AcceptWithResponder( 218 bool {{class_name}}Stub::AcceptWithResponder(
211 mojo::Message* message, mojo::MessageReceiver* responder) { 219 mojo::Message* message, mojo::MessageReceiver* responder) {
212 {%- if interface.methods %} 220 {%- if interface.methods %}
213 switch (message->header()->name) { 221 switch (message->header()->name) {
214 {%- for method in interface.methods %} 222 {%- for method in interface.methods %}
215 case internal::k{{class_name}}_{{method.name}}_Name: { 223 case internal::k{{class_name}}_{{method.name}}_Name: {
216 {%- if method.response_parameters != None %} 224 {%- if method.response_parameters != None %}
217 internal::{{class_name}}_{{method.name}}_Params_Data* params = 225 internal::{{class_name}}_{{method.name}}_Params_Data* params =
218 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 226 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
219 message->mutable_payload()); 227 message->mutable_payload());
220 228
221 if (!params->DecodePointersAndHandles(message)) 229 if (!params->DecodePointersAndHandles(message))
222 return false; 230 return false;
223 {{interface_macros.declare_callback(method)}}::Runnable* runnable = 231 {{interface_macros.declare_callback(method)}}::Runnable* runnable =
224 new {{class_name}}_{{method.name}}_ProxyToResponder( 232 new {{class_name}}_{{method.name}}_ProxyToResponder(
225 message->request_id(), responder); 233 message->request_id(), responder);
226 {{interface_macros.declare_callback(method)}} callback(runnable); 234 {{interface_macros.declare_callback(method)}} callback(runnable);
235 {{alloc_params(method.parameters)|indent(6)}}
227 sink_->{{method.name}}( 236 sink_->{{method.name}}(
228 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back); 237 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back);
229 params->CloseHandles();
230 return true; 238 return true;
231 {%- else %} 239 {%- else %}
232 break; 240 break;
233 {%- endif %} 241 {%- endif %}
234 } 242 }
235 {%- endfor %} 243 {%- endfor %}
236 } 244 }
237 {%- endif %} 245 {%- endif %}
238 return false; 246 return false;
239 } 247 }
(...skipping 13 matching lines...) Expand all
253 {% if interface|has_callbacks %} 261 {% if interface|has_callbacks %}
254 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 262 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
255 mojo::MessageReceiver* sink) : MessageFilter(sink) { 263 mojo::MessageReceiver* sink) : MessageFilter(sink) {
256 } 264 }
257 265
258 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 266 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
259 // TODO(yzshen): implement validation logic. 267 // TODO(yzshen): implement validation logic.
260 return sink_->Accept(message); 268 return sink_->Accept(message);
261 } 269 }
262 {%- endif -%} 270 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698