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 |
deleted file mode 100644 |
index fdbe8ca0df4665ee89ea5b902c127e2873d9e1e8..0000000000000000000000000000000000000000 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ /dev/null |
@@ -1,351 +0,0 @@ |
-{%- import "interface_macros.tmpl" as interface_macros %} |
-{%- set class_name = interface.name %} |
-{%- set proxy_name = interface.name ~ "Proxy" %} |
-{%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} |
- |
-{%- 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_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|get_name_for_kind}}>(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(¶ms->{{param.name}}))) |
-{%- elif param.kind|is_interface_request_kind -%} |
-mojo::MakeRequest<{{param.kind.kind|get_name_for_kind}}>(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(¶ms->{{param.name}}))) |
-{%- elif param.kind|is_any_handle_kind -%} |
-mojo::MakeScopedHandle(mojo::internal::FetchAndReset(¶ms->{{param.name}})) |
-{%- elif param.kind|is_enum_kind -%} |
-static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}}) |
-{%- else -%} |
-params->{{param.name}} |
-{%- endif -%} |
-{%- if not loop.last %}, {% endif %} |
-{%- endfor %} |
-{%- endmacro %} |
- |
-{%- macro compute_payload_size(params_name, parameters) -%} |
- size_t payload_size = |
- mojo::internal::Align(sizeof({{params_name}})); |
-{#--- Computes #} |
-{%- for param in parameters %} |
-{%- if param.kind|is_object_kind %} |
- payload_size += GetSerializedSize_(in_{{param.name}}); |
-{%- endif %} |
-{%- endfor %} |
-{%- endmacro %} |
- |
-{%- macro build_message(params_name, parameters, params_description) -%} |
- {# TODO(yzshen): Consider refactoring to share code with |
- struct_serialization_definition.tmpl #} |
- {{params_name}}* params = |
- {{params_name}}::New(builder.buffer()); |
-{#--- Sets #} |
-{% for param in parameters %} |
-{%- if param.kind|is_object_kind %} |
-{%- if param.kind|is_array_kind %} |
- mojo::SerializeArray_<{{param.kind|get_array_validate_params|indent(24)}}>( |
- mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr); |
-{%- elif param.kind|is_map_kind %} |
- mojo::SerializeMap_<{{param.kind.value_kind|get_map_validate_params|indent(24)}}>( |
- mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr); |
-{%- else %} |
- Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr); |
-{%- endif %} |
-{%- if not param.kind|is_nullable_kind %} |
- MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
- !params->{{param.name}}.ptr, |
- mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
- "null {{param.name}} argument in {{params_description}}"); |
-{%- endif %} |
-{%- elif param.kind|is_any_handle_kind %} |
-{%- if param.kind|is_interface_kind or |
- param.kind|is_interface_request_kind %} |
- // Delegate handle. |
- params->{{param.name}} = in_{{param.name}}.PassMessagePipe().release(); |
-{%- else %} |
- params->{{param.name}} = in_{{param.name}}.release(); |
-{%- endif %} |
-{%- if not param.kind|is_nullable_kind %} |
- MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
- !params->{{param.name}}.is_valid(), |
- mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, |
- "invalid {{param.name}} argument in {{params_description}}"); |
-{%- endif %} |
-{%- else %} |
- params->{{param.name}} = in_{{param.name}}; |
-{%- endif %} |
-{%- endfor %} |
- mojo::Message message; |
- params->EncodePointersAndHandles(message.mutable_handles()); |
- builder.Finish(&message); |
-{%- endmacro %} |
- |
-{#--- Begin #} |
-const char* {{class_name}}::Name_ = "{{namespace_as_string}}::{{class_name}}"; |
-{#--- Constants #} |
-{% for constant in interface.constants %} |
-const {{constant.kind|cpp_pod_type}} {{interface.name}}::{{constant.name}} = {{constant|constant_value}}; |
-{%- endfor %} |
- |
-{#--- ForwardToCallback definition #} |
-{%- for method in interface.methods -%} |
-{%- if method.response_parameters != None %} |
-class {{class_name}}_{{method.name}}_ForwardToCallback |
- : public mojo::MessageReceiver { |
- public: |
- {{class_name}}_{{method.name}}_ForwardToCallback( |
- const {{interface_macros.declare_callback(method)}}& callback) |
- : callback_(callback) { |
- } |
- virtual bool Accept(mojo::Message* message) override; |
- private: |
- {{interface_macros.declare_callback(method)}} callback_; |
- MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); |
-}; |
-bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
- mojo::Message* message) { |
- internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
- reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_Data*>( |
- message->mutable_payload()); |
- |
- params->DecodePointersAndHandles(message->mutable_handles()); |
- {{alloc_params(method.response_parameters)|indent(2)}} |
- callback_.Run({{pass_params(method.response_parameters)}}); |
- return true; |
-} |
-{%- endif %} |
-{%- endfor %} |
- |
-{{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) |
- : receiver_(receiver) { |
-} |
- |
-{#--- Proxy definitions #} |
- |
-{%- for method in interface.methods %} |
-{%- set message_name = |
- "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
-{%- set params_name = |
- "internal::%s_%s_Params_Data"|format(interface.name, method.name) %} |
-{%- set params_description = |
- "%s.%s request"|format(interface.name, method.name) %} |
-void {{proxy_name}}::{{method.name}}( |
- {{interface_macros.declare_request_params("in_", method)}}) { |
- {{compute_payload_size(params_name, method.parameters)}} |
- |
-{%- if method.response_parameters != None %} |
- mojo::internal::RequestMessageBuilder builder({{message_name}}, payload_size); |
-{%- else %} |
- mojo::internal::MessageBuilder builder({{message_name}}, payload_size); |
-{%- endif %} |
- |
- {{build_message(params_name, method.parameters, params_description)}} |
- |
-{%- if method.response_parameters != None %} |
- mojo::MessageReceiver* responder = |
- new {{class_name}}_{{method.name}}_ForwardToCallback(callback); |
- if (!receiver_->AcceptWithResponder(&message, responder)) |
- delete responder; |
-{%- else %} |
- bool ok = receiver_->Accept(&message); |
- // This return value may be ignored as !ok implies the Connector has |
- // encountered an error, which will be visible through other means. |
- MOJO_ALLOW_UNUSED_LOCAL(ok); |
-{%- endif %} |
-} |
-{%- endfor %} |
- |
-{#--- ProxyToResponder definition #} |
-{%- for method in interface.methods -%} |
-{%- if method.response_parameters != None %} |
-{%- set message_name = |
- "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
-{%- set params_name = |
- "internal::%s_%s_ResponseParams_Data"|format(interface.name, method.name) %} |
-{%- set params_description = |
- "%s.%s response"|format(interface.name, method.name) %} |
-class {{class_name}}_{{method.name}}_ProxyToResponder |
- : public {{interface_macros.declare_callback(method)}}::Runnable { |
- public: |
- virtual ~{{class_name}}_{{method.name}}_ProxyToResponder() { |
- delete responder_; |
- } |
- |
- {{class_name}}_{{method.name}}_ProxyToResponder( |
- uint64_t request_id, |
- mojo::MessageReceiver* responder) |
- : request_id_(request_id), |
- responder_(responder) { |
- } |
- |
- virtual void Run({{interface_macros.declare_params("in_", method.response_parameters)}}) const override; |
- |
- private: |
- uint64_t request_id_; |
- mutable mojo::MessageReceiver* responder_; |
- MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder); |
-}; |
-void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
- {{interface_macros.declare_params("in_", method.response_parameters)}}) const { |
- {{compute_payload_size(params_name, method.response_parameters)}} |
- mojo::internal::ResponseMessageBuilder builder( |
- {{message_name}}, payload_size, request_id_); |
- {{build_message(params_name, method.response_parameters, params_description)}} |
- bool ok = responder_->Accept(&message); |
- MOJO_ALLOW_UNUSED_LOCAL(ok); |
- // TODO(darin): !ok returned here indicates a malformed message, and that may |
- // be good reason to close the connection. However, we don't have a way to do |
- // that from here. We should add a way. |
- delete responder_; |
- responder_ = nullptr; |
-} |
-{%- endif -%} |
-{%- endfor %} |
- |
-{{class_name}}Stub::{{class_name}}Stub() |
- : sink_(nullptr) { |
-} |
- |
-{#--- Stub definition #} |
- |
-bool {{class_name}}Stub::Accept(mojo::Message* message) { |
-{%- if interface.methods %} |
- switch (message->header()->name) { |
-{%- for method in interface.methods %} |
- case internal::k{{class_name}}_{{method.name}}_Name: { |
-{%- if method.response_parameters == None %} |
- internal::{{class_name}}_{{method.name}}_Params_Data* params = |
- reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*>( |
- message->mutable_payload()); |
- |
- params->DecodePointersAndHandles(message->mutable_handles()); |
- {{alloc_params(method.parameters)|indent(6)}} |
- // A null |sink_| typically means there is a missing call to |
- // InterfacePtr::set_client(). |
- assert(sink_); |
- sink_->{{method.name}}({{pass_params(method.parameters)}}); |
- return true; |
-{%- else %} |
- break; |
-{%- endif %} |
- } |
-{%- endfor %} |
- } |
-{%- endif %} |
- return false; |
-} |
- |
-bool {{class_name}}Stub::AcceptWithResponder( |
- mojo::Message* message, mojo::MessageReceiver* responder) { |
-{%- if interface.methods %} |
- switch (message->header()->name) { |
-{%- for method in interface.methods %} |
- case internal::k{{class_name}}_{{method.name}}_Name: { |
-{%- if method.response_parameters != None %} |
- internal::{{class_name}}_{{method.name}}_Params_Data* params = |
- reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*>( |
- message->mutable_payload()); |
- |
- params->DecodePointersAndHandles(message->mutable_handles()); |
- {{interface_macros.declare_callback(method)}}::Runnable* runnable = |
- new {{class_name}}_{{method.name}}_ProxyToResponder( |
- message->request_id(), responder); |
- {{interface_macros.declare_callback(method)}} callback(runnable); |
- {{alloc_params(method.parameters)|indent(6)}} |
- // A null |sink_| typically means there is a missing call to |
- // InterfacePtr::set_client(). |
- assert(sink_); |
- sink_->{{method.name}}( |
-{%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}callback); |
- return true; |
-{%- else %} |
- break; |
-{%- endif %} |
- } |
-{%- endfor %} |
- } |
-{%- endif %} |
- return false; |
-} |
- |
-{#--- Request validator definitions #} |
- |
-{{class_name}}RequestValidator::{{class_name}}RequestValidator( |
- mojo::MessageReceiver* sink) : MessageFilter(sink) { |
-} |
- |
-bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
-{%- if interface.methods %} |
- switch (message->header()->name) { |
-{%- for method in interface.methods %} |
- case internal::k{{class_name}}_{{method.name}}_Name: { |
-{%- if method.response_parameters != None %} |
- if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) |
- break; |
-{%- else %} |
- if (message->has_flag(mojo::internal::kMessageExpectsResponse) || |
- message->has_flag(mojo::internal::kMessageIsResponse)) { |
- break; |
- } |
-{%- endif %} |
- mojo::internal::BoundsChecker bounds_checker( |
- message->payload(), message->payload_num_bytes(), |
- message->handles()->size()); |
- if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( |
- message->payload(), &bounds_checker)) { |
- return false; |
- } |
- break; |
- } |
-{%- endfor %} |
- } |
-{%- endif %} |
- |
- // A null |sink_| typically means there is a missing call to |
- // InterfacePtr::set_client(). |
- assert(sink_); |
- return sink_->Accept(message); |
-} |
- |
-{#--- Response validator definitions #} |
-{% if interface|has_callbacks %} |
-{{class_name}}ResponseValidator::{{class_name}}ResponseValidator( |
- mojo::MessageReceiver* sink) : MessageFilter(sink) { |
-} |
- |
-bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
-{%- if interface.methods %} |
- switch (message->header()->name) { |
-{%- for method in interface.methods if method.response_parameters != None %} |
- case internal::k{{class_name}}_{{method.name}}_Name: { |
- if (!message->has_flag(mojo::internal::kMessageIsResponse)) |
- break; |
- mojo::internal::BoundsChecker bounds_checker( |
- message->payload(), message->payload_num_bytes(), |
- message->handles()->size()); |
- if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validate( |
- message->payload(), &bounds_checker)) { |
- return false; |
- } |
- break; |
- } |
-{%- endfor %} |
- } |
-{%- endif %} |
- |
- // A null |sink_| typically means there is a missing call to |
- // InterfacePtr::set_client(). |
- assert(sink_); |
- return sink_->Accept(message); |
-} |
-{%- endif -%} |