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

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: fix windows bustage 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 if (params->{{param.name}}.ptr)
10 Deserialize_(params->{{param.name}}.ptr, &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::MakeScopedHandle(mojo::internal::Fetc hAndReset(&params->{{param.name}})))
11 {%- elif param.kind|is_handle_kind -%} 23 {%- elif param.kind|is_handle_kind -%}
12 mojo::MakePassable(params->{{param.name}}()).Pass() 24 mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&params->{{param.name}}))
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 Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &pa rams->{{param.name}}.ptr);
42 mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer()));
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->{{param.name}} = mojo::MessagePipeHandle();
46 } else { 57 } else {
47 // Delegate handle. 58 // Delegate handle.
48 params->set_{{param.name}}( 59 params->{{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->{{param.name}} = in_{{param.name}}.release();
53 {%- else %} 64 {%- else %}
54 params->set_{{param.name}}(in_{{param.name}}); 65 params->{{param.name}} = in_{{param.name}};
55 {%- endif %} 66 {%- endif %}
56 {%- endfor %} 67 {%- endfor %}
57 mojo::Message message; 68 mojo::Message message;
58 params->EncodePointersAndHandles(message.mutable_handles()); 69 params->EncodePointersAndHandles(message.mutable_handles());
59 builder.Finish(&message); 70 builder.Finish(&message);
60 {%- endmacro %} 71 {%- endmacro %}
61 72
62 {#--- Begin #} 73 {#--- Begin #}
63 74
64 {#--- Constants #} 75 {#--- Constants #}
(...skipping 23 matching lines...) Expand all
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();
100 return true; 111 return true;
101 } 112 }
102 {%- endif %} 113 {%- endif %}
103 {%- endfor %} 114 {%- endfor %}
104 115
105 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiver* receiver) 116 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiver* receiver)
106 : receiver_(receiver) { 117 : receiver_(receiver) {
107 } 118 }
108 119
109 {#--- Proxy definitions #} 120 {#--- Proxy definitions #}
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 switch (message->header()->name) { 204 switch (message->header()->name) {
194 {%- for method in interface.methods %} 205 {%- for method in interface.methods %}
195 case internal::k{{class_name}}_{{method.name}}_Name: { 206 case internal::k{{class_name}}_{{method.name}}_Name: {
196 {%- if method.response_parameters == None %} 207 {%- if method.response_parameters == None %}
197 internal::{{class_name}}_{{method.name}}_Params_Data* params = 208 internal::{{class_name}}_{{method.name}}_Params_Data* params =
198 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 209 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
199 message->mutable_payload()); 210 message->mutable_payload());
200 211
201 if (!params->DecodePointersAndHandles(message)) 212 if (!params->DecodePointersAndHandles(message))
202 return false; 213 return false;
214 {{alloc_params(method.parameters)|indent(6)}}
203 sink_->{{method.name}}({{pass_params(method.parameters)}}); 215 sink_->{{method.name}}({{pass_params(method.parameters)}});
204 params->CloseHandles();
205 return true; 216 return true;
206 {%- else %} 217 {%- else %}
207 break; 218 break;
208 {%- endif %} 219 {%- endif %}
209 } 220 }
210 {%- endfor %} 221 {%- endfor %}
211 } 222 }
212 {%- endif %} 223 {%- endif %}
213 return false; 224 return false;
214 } 225 }
215 226
216 bool {{class_name}}Stub::AcceptWithResponder( 227 bool {{class_name}}Stub::AcceptWithResponder(
217 mojo::Message* message, mojo::MessageReceiver* responder) { 228 mojo::Message* message, mojo::MessageReceiver* responder) {
218 {%- if interface.methods %} 229 {%- if interface.methods %}
219 switch (message->header()->name) { 230 switch (message->header()->name) {
220 {%- for method in interface.methods %} 231 {%- for method in interface.methods %}
221 case internal::k{{class_name}}_{{method.name}}_Name: { 232 case internal::k{{class_name}}_{{method.name}}_Name: {
222 {%- if method.response_parameters != None %} 233 {%- if method.response_parameters != None %}
223 internal::{{class_name}}_{{method.name}}_Params_Data* params = 234 internal::{{class_name}}_{{method.name}}_Params_Data* params =
224 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 235 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
225 message->mutable_payload()); 236 message->mutable_payload());
226 237
227 if (!params->DecodePointersAndHandles(message)) 238 if (!params->DecodePointersAndHandles(message))
228 return false; 239 return false;
229 {{interface_macros.declare_callback(method)}}::Runnable* runnable = 240 {{interface_macros.declare_callback(method)}}::Runnable* runnable =
230 new {{class_name}}_{{method.name}}_ProxyToResponder( 241 new {{class_name}}_{{method.name}}_ProxyToResponder(
231 message->request_id(), responder); 242 message->request_id(), responder);
232 {{interface_macros.declare_callback(method)}} callback(runnable); 243 {{interface_macros.declare_callback(method)}} callback(runnable);
244 {{alloc_params(method.parameters)|indent(6)}}
233 sink_->{{method.name}}( 245 sink_->{{method.name}}(
234 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back); 246 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back);
235 params->CloseHandles();
236 return true; 247 return true;
237 {%- else %} 248 {%- else %}
238 break; 249 break;
239 {%- endif %} 250 {%- endif %}
240 } 251 }
241 {%- endfor %} 252 {%- endfor %}
242 } 253 }
243 {%- endif %} 254 {%- endif %}
244 return false; 255 return false;
245 } 256 }
(...skipping 13 matching lines...) Expand all
259 {% if interface|has_callbacks %} 270 {% if interface|has_callbacks %}
260 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 271 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
261 mojo::MessageReceiver* sink) : MessageFilter(sink) { 272 mojo::MessageReceiver* sink) : MessageFilter(sink) {
262 } 273 }
263 274
264 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 275 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
265 // TODO(yzshen): implement validation logic. 276 // TODO(yzshen): implement validation logic.
266 return sink_->Accept(message); 277 return sink_->Accept(message);
267 } 278 }
268 {%- endif -%} 279 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698