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

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: rebase 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 0d605a6bd75d47dd6e8872ac7dd624d281740f68..e0b74f903f16e64fc541e20d0efb2c0d522ba4a7 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -2,18 +2,29 @@
{%- 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}}.ptr, &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}}())
+{%- if param.kind|is_string_kind -%}
+p{{loop.index}}
+{%- elif param.kind|is_object_kind -%}
+p{{loop.index}}.Pass()
{%- elif param.kind|is_interface_kind -%}
-mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}()).Pass())
+mojo::MakeProxy<{{param.kind.name}}>(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&params->{{param.name}})))
{%- elif param.kind|is_handle_kind -%}
-mojo::MakePassable(params->{{param.name}}()).Pass()
+mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&params->{{param.name}}))
{%- elif param.kind|is_enum_kind -%}
-static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}}())
+static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}})
{%- else -%}
-params->{{param.name}}()
+params->{{param.name}}
{%- endif -%}
{%- if not loop.last %}, {% endif %}
{%- endfor %}
@@ -25,8 +36,7 @@ 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();
+ payload_size += GetSerializedSize_(in_{{param.name}});
{%- endif %}
{%- endfor %}
{%- endmacro %}
@@ -37,21 +47,19 @@ 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()));
+ Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &params->{{param.name}}.ptr);
{%- elif param.kind|is_interface_kind %}
if (!in_{{param.name}}.get()) {
- params->set_{{param.name}}(mojo::MessagePipeHandle());
+ params->{{param.name}} = mojo::MessagePipeHandle();
} else {
// Delegate handle.
- params->set_{{param.name}}(
- in_{{param.name}}.ResetAndReturnMessagePipe().release());
+ params->{{param.name}} =
+ in_{{param.name}}.ResetAndReturnMessagePipe().release();
}
{%- elif param.kind|is_handle_kind %}
- params->set_{{param.name}}(in_{{param.name}}.release());
+ params->{{param.name}} = in_{{param.name}}.release();
{%- else %}
- params->set_{{param.name}}(in_{{param.name}});
+ params->{{param.name}} = in_{{param.name}};
{%- endif %}
{%- endfor %}
mojo::Message message;
@@ -89,8 +97,8 @@ 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;
}
{%- endif %}
@@ -194,8 +202,8 @@ 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;
{%- else %}
break;
@@ -224,9 +232,9 @@ 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();
return true;
{%- else %}
break;

Powered by Google App Engine
This is Rietveld 408576698