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

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: fix windows bustage 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..e9d8943311eabf8616ac363b00afbabc24846f7e 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,30 @@
{%- 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}};
+if (params->{{param.name}}.ptr)
+ 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 +37,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,21 +49,20 @@ 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}})
+ 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;
@@ -95,8 +106,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 %}
@@ -200,8 +211,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;
@@ -230,9 +241,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