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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
index ef091d6b29ded1c6d3c8af6ea006a417753b9ce1..7d6711ae8d97b7fb2f153ad34d9f261278cbd692 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -2,10 +2,19 @@
{%- set class_name = interface.name %}
{%- set proxy_name = interface.name ~ "Proxy" %}
+{%- macro alloc_params(parameters) %}
+{%- for param in parameters %}
+{%- if param.kind|is_object_kind %}
+{{param.kind|cpp_result_type}} p{{loop.index}};
+Deserialize_(params->{{param.name}}(), &p{{loop.index}});
+{% endif -%}
+{%- endfor %}
+{%- endmacro %}
+
{%- macro pass_params(parameters) %}
{%- for param in parameters %}
{%- if param.kind|is_object_kind -%}
-mojo::internal::Wrap(params->{{param.name}}())
+p{{loop.index}}.Pass()
{%- elif param.kind|is_interface_kind -%}
mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}()).Pass())
{%- elif param.kind|is_handle_kind -%}
@@ -25,8 +34,8 @@ params->{{param.name}}()
{#--- Computes #}
{%- for param in parameters %}
{%- if param.kind|is_object_kind %}
- if (!in_{{param.name}}.is_null())
- payload_size += mojo::internal::Unwrap(in_{{param.name}})->ComputeSize();
+ if (in_{{param.name}})
+ payload_size += GetSerializedSize_(in_{{param.name}});
{%- endif %}
{%- endfor %}
{%- endmacro %}
@@ -37,9 +46,11 @@ params->{{param.name}}()
{#--- Sets #}
{% for param in parameters %}
{%- if param.kind|is_object_kind %}
- if (!in_{{param.name}}.is_null())
- params->set_{{param.name}}(
- mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer()));
+ if (in_{{param.name}}) {
+ {{param.kind|cpp_type}} tmp;
+ Serialize_(in_{{param.name}}, builder.buffer(), &tmp);
+ params->set_{{param.name}}(tmp);
+ }
{%- elif param.kind|is_interface_kind %}
if (!in_{{param.name}}.get()) {
params->set_{{param.name}}(mojo::MessagePipeHandle());
@@ -95,6 +106,7 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
if (!params->DecodePointersAndHandles(message))
return false;
+ {{alloc_params(method.response_parameters)|indent(2)}}
callback_.Run({{pass_params(method.response_parameters)}});
params->CloseHandles();
return true;
@@ -200,6 +212,7 @@ bool {{class_name}}Stub::Accept(mojo::Message* message) {
if (!params->DecodePointersAndHandles(message))
return false;
+ {{alloc_params(method.parameters)|indent(6)}}
sink_->{{method.name}}({{pass_params(method.parameters)}});
params->CloseHandles();
return true;
@@ -230,6 +243,7 @@ bool {{class_name}}Stub::AcceptWithResponder(
new {{class_name}}_{{method.name}}_ProxyToResponder(
message->request_id(), responder);
{{interface_macros.declare_callback(method)}} callback(runnable);
+ {{alloc_params(method.parameters)|indent(6)}}
sink_->{{method.name}}(
{%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}callback);
params->CloseHandles();

Powered by Google App Engine
This is Rietveld 408576698