diff options
Diffstat (limited to 'mojo/public/tools/bindings/generators/cpp_templates')
22 files changed, 0 insertions, 1315 deletions
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl deleted file mode 100644 index 86c85d7d..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl +++ /dev/null @@ -1,9 +0,0 @@ -enum {{enum.name}} { -{%- for field in enum.fields %} -{%- if field.value %} - {{enum.name|to_all_caps}}_{{field.name}} = {{field.value|expression_to_text}}, -{%- else %} - {{enum.name|to_all_caps}}_{{field.name}}, -{%- endif %} -{%- endfor %} -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl deleted file mode 100644 index 30d20d8..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl +++ /dev/null @@ -1,49 +0,0 @@ -{%- import "interface_macros.tmpl" as interface_macros %} -class {{interface.name}}Proxy; -class {{interface.name}}Stub; - -class {{interface.name}}RequestValidator; -{%- if interface|has_callbacks %} -class {{interface.name}}ResponseValidator; -{%- endif %} -{% if interface.client %} -class {{interface.client}}; -{% endif %} - -class {{interface.name}} { - public: - static const char* Name_; - - typedef {{interface.name}}Proxy Proxy_; - typedef {{interface.name}}Stub Stub_; - - typedef {{interface.name}}RequestValidator RequestValidator_; -{%- if interface|has_callbacks %} - typedef {{interface.name}}ResponseValidator ResponseValidator_; -{%- else %} - typedef mojo::PassThroughFilter ResponseValidator_; -{%- endif %} -{% if interface.client %} - typedef {{interface.client}} Client; -{% else %} - typedef mojo::NoInterface Client; -{% endif %} - -{#--- Constants #} -{%- for constant in interface.constants %} - static const {{constant.kind|cpp_pod_type}} {{constant.name}}; -{%- endfor %} - -{#--- Enums #} -{%- for enum in interface.enums %} -{% macro enum_def() %}{% include "enum_declaration.tmpl" %}{% endmacro %} - {{enum_def()|indent(2)}} -{%- endfor %} - -{#--- Methods #} - virtual ~{{interface.name}}() {} - -{%- for method in interface.methods %} - virtual void {{method.name}}({{interface_macros.declare_request_params("", method)}}) = 0; -{%- endfor %} -}; 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 fdbe8ca..0000000 --- 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 -%} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl deleted file mode 100644 index fbefce2..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl +++ /dev/null @@ -1,23 +0,0 @@ -{%- macro declare_params(prefix, parameters) %} -{%- for param in parameters -%} -{{param.kind|cpp_const_wrapper_type}} {{prefix}}{{param.name}} -{%- if not loop.last %}, {% endif %} -{%- endfor %} -{%- endmacro %} - -{%- macro declare_callback(method) -%} -mojo::Callback<void( -{%- for param in method.response_parameters -%} -{{param.kind|cpp_result_type}} -{%- if not loop.last %}, {% endif %} -{%- endfor -%} -)> -{%- endmacro -%} - -{%- macro declare_request_params(prefix, method) -%} -{{declare_params(prefix, method.parameters)}} -{%- if method.response_parameters != None -%} -{%- if method.parameters %}, {% endif %} -const {{declare_callback(method)}}& callback -{%- endif -%} -{%- endmacro -%} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl deleted file mode 100644 index 6b8e7c5..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl +++ /dev/null @@ -1,14 +0,0 @@ -{%- import "interface_macros.tmpl" as interface_macros %} -class {{interface.name}}Proxy : public {{interface.name}} { - public: - explicit {{interface.name}}Proxy(mojo::MessageReceiverWithResponder* receiver); - -{%- for method in interface.methods %} - virtual void {{method.name}}( - {{interface_macros.declare_request_params("", method)}} - ) override; -{%- endfor %} - - private: - mojo::MessageReceiverWithResponder* receiver_; -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl deleted file mode 100644 index 2239b69..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -class {{interface.name}}RequestValidator : public mojo::MessageFilter { - public: - explicit {{interface.name}}RequestValidator(mojo::MessageReceiver* sink = nullptr); - - virtual bool Accept(mojo::Message* message) override; -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl deleted file mode 100644 index 801603d..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -class {{interface.name}}ResponseValidator : public mojo::MessageFilter { - public: - explicit {{interface.name}}ResponseValidator(mojo::MessageReceiver* sink = nullptr); - - virtual bool Accept(mojo::Message* message) override; -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl deleted file mode 100644 index afc6504..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl +++ /dev/null @@ -1,13 +0,0 @@ -class {{interface.name}}Stub : public mojo::MessageReceiverWithResponder { - public: - {{interface.name}}Stub(); - void set_sink({{interface.name}}* sink) { sink_ = sink; } - {{interface.name}}* sink() { return sink_; } - - virtual bool Accept(mojo::Message* message) override; - virtual bool AcceptWithResponder(mojo::Message* message, - mojo::MessageReceiver* responder) override; - - private: - {{interface.name}}* sink_; -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl deleted file mode 100644 index 116e86a..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -{%- set header_guard = "%s_INTERNAL_H_"| - format(module.path|upper|replace("/","_")|replace(".","_")) %} - -#ifndef {{header_guard}} -#define {{header_guard}} - -#include "mojo/public/cpp/bindings/lib/bindings_internal.h" -#include "mojo/public/cpp/bindings/lib/buffer.h" -#include "mojo/public/cpp/bindings/lib/union_accessor.h" -#include "mojo/public/cpp/bindings/struct_ptr.h" - -{%- for import in imports %} -#include "{{import.module.path}}-internal.h" -{%- endfor %} - -namespace mojo { -namespace internal { -class BoundsChecker; -} -} - -{%- for namespace in namespaces_as_array %} -namespace {{namespace}} { -{%- endfor %} - -{#--- Wrapper forward declarations #} -{% for struct in structs %} -class {{struct.name}}; -{%- endfor %} - -namespace internal { - -{#--- Internal forward declarations #} -{% for struct in structs %} -class {{struct.name}}_Data; -{%- endfor %} - -#pragma pack(push, 1) - -{#--- Class declarations #} -{% for struct in structs %} -{% include "struct_declaration.tmpl" %} -{%- endfor %} - -#pragma pack(pop) - -} // namespace internal -{%- for namespace in namespaces_as_array|reverse %} -} // namespace {{namespace}} -{%- endfor %} - -#endif // {{header_guard}} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl deleted file mode 100644 index 1ddcc45..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-private-field" -#elif defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4056) -#pragma warning(disable:4756) -#endif - -#include "{{module.path}}.h" - -#include <math.h> - -#include "mojo/public/cpp/bindings/lib/array_serialization.h" -#include "mojo/public/cpp/bindings/lib/bindings_serialization.h" -#include "mojo/public/cpp/bindings/lib/bounds_checker.h" -#include "mojo/public/cpp/bindings/lib/map_data_internal.h" -#include "mojo/public/cpp/bindings/lib/map_serialization.h" -#include "mojo/public/cpp/bindings/lib/message_builder.h" -#include "mojo/public/cpp/bindings/lib/string_serialization.h" -#include "mojo/public/cpp/bindings/lib/validate_params.h" -#include "mojo/public/cpp/bindings/lib/validation_errors.h" -#include "mojo/public/cpp/environment/logging.h" - -{%- for namespace in namespaces_as_array %} -namespace {{namespace}} { -{%- endfor %} - -{#--- Constants #} -{% for constant in module.constants %} -const {{constant.kind|cpp_pod_type}} {{constant.name}} = {{constant|constant_value}}; -{%- endfor %} - -namespace internal { -namespace { - -#pragma pack(push, 1) - -{#--- Interface parameter definitions #} -{%- for interface in interfaces %} -{%- for method in interface.methods %} -{%- set method_name = "k%s_%s_Name"|format(interface.name, method.name) %} -const uint32_t {{method_name}} = {{method.ordinal}}; -{% set struct = method|struct_from_method %} -{%- include "params_definition.tmpl" %} -{%- if method.response_parameters != None %} -{%- set struct = method|response_struct_from_method %} -{%- include "params_definition.tmpl" %} -{%- endif %} -{%- endfor %} -{%- endfor %} - -#pragma pack(pop) - -} // namespace - -{#--- Struct definitions #} -{% for struct in structs %} -{%- include "struct_definition.tmpl" %} -{%- endfor %} - -} // namespace internal - -{#--- Struct Constants #} -{%- for struct in structs %} -{% for constant in struct.constants %} -const {{constant.kind|cpp_pod_type}} {{struct.name}}::{{constant.name}} = {{constant|constant_value}}; -{%- endfor %} -{%- endfor %} - -{#--- Struct builder definitions #} -{%- for struct in structs %} -{%- include "wrapper_class_definition.tmpl" %} -{%- endfor %} - -{#--- Interface definitions #} -{%- for interface in interfaces %} -{%- include "interface_definition.tmpl" %} -{%- endfor %} - -{#--- Struct Serialization Helpers #} -{%- for struct in structs %} -{%- include "struct_serialization_definition.tmpl" %} -{%- endfor %} - -{%- for namespace in namespaces_as_array|reverse %} -} // namespace {{namespace}} -{%- endfor %} - -#if defined(__clang__) -#pragma clang diagnostic pop -#elif defined(_MSC_VER) -#pragma warning(pop) -#endif diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl deleted file mode 100644 index 3da6c32..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -{%- set header_guard = "%s_H_"| - format(module.path|upper|replace("/","_")|replace(".","_")) %} - -#ifndef {{header_guard}} -#define {{header_guard}} - -#include "mojo/public/cpp/bindings/array.h" -#include "mojo/public/cpp/bindings/callback.h" -#include "mojo/public/cpp/bindings/interface_impl.h" -#include "mojo/public/cpp/bindings/interface_ptr.h" -#include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/public/cpp/bindings/map.h" -#include "mojo/public/cpp/bindings/message_filter.h" -#include "mojo/public/cpp/bindings/no_interface.h" -#include "mojo/public/cpp/bindings/string.h" -#include "mojo/public/cpp/bindings/struct_ptr.h" -#include "{{module.path}}-internal.h" -{%- for import in imports %} -#include "{{import.module.path}}.h" -{%- endfor %} - -{%- for namespace in namespaces_as_array %} -namespace {{namespace}} { -{%- endfor %} - -{#--- Constants #} -{% for constant in module.constants %} -extern const {{constant.kind|cpp_pod_type}} {{constant.name}}; -{%- endfor %} - -{#--- Enums #} -{% for enum in enums %} -{% include "enum_declaration.tmpl" %} -{%- endfor %} - -{#--- Interface Forward Declarations -#} -{% for interface in interfaces %} -class {{interface.name}}; -typedef mojo::InterfacePtr<{{interface.name}}> {{interface.name}}Ptr; -{% endfor %} - -{#--- Struct Forward Declarations -#} -{% for struct in structs %} -class {{struct.name}}; -{% if struct|should_inline %} -typedef mojo::InlinedStructPtr<{{struct.name}}> {{struct.name}}Ptr; -{% else %} -typedef mojo::StructPtr<{{struct.name}}> {{struct.name}}Ptr; -{% endif %} -{% endfor %} - -{#--- NOTE: Non-inlined structs may have pointers to inlined structs, so we #} -{#--- need to fully define inlined structs ahead of the others. #} - -{#--- Inlined structs #} -{% for struct in structs %} -{% if struct|should_inline %} -{% include "wrapper_class_declaration.tmpl" %} -{% endif %} -{%- endfor %} - -{#--- Non-inlined structs #} -{% for struct in structs %} -{% if not struct|should_inline %} -{% include "wrapper_class_declaration.tmpl" %} -{% endif %} -{%- endfor %} - -{#--- Interfaces -#} -{% for interface in interfaces %} -{% include "interface_declaration.tmpl" %} -{%- endfor %} - -{#--- Interface Proxies -#} -{% for interface in interfaces %} -{% include "interface_proxy_declaration.tmpl" %} -{%- endfor %} - -{#--- Interface Stubs -#} -{% for interface in interfaces %} -{% include "interface_stub_declaration.tmpl" %} -{%- endfor %} - -{#--- Interface Request Validators -#} -{% for interface in interfaces %} -{% include "interface_request_validator_declaration.tmpl" %} -{%- endfor %} - -{#--- Interface Response Validators -#} -{% for interface in interfaces if interface|has_callbacks %} -{% include "interface_response_validator_declaration.tmpl" %} -{%- endfor %} - -{#--- Struct Serialization Helpers -#} -{% if structs %} -{% for struct in structs %} -{% include "struct_serialization_declaration.tmpl" %} -{%- endfor %} -{%- endif %} - -{%- for namespace in namespaces_as_array|reverse %} -} // namespace {{namespace}} -{%- endfor %} - -#endif // {{header_guard}} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl deleted file mode 100644 index 5de77d3..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl +++ /dev/null @@ -1,33 +0,0 @@ -{%- import "struct_macros.tmpl" as struct_macros %} -{%- set class_name = struct.name ~ "_Data" %} -class {{class_name}} { - public: - static {{class_name}}* New(mojo::internal::Buffer* buf) { - return new (buf->Allocate(sizeof({{class_name}}))) - {{class_name}}(); - } - - static bool Validate(const void* data, - mojo::internal::BoundsChecker* bounds_checker) { - {{ struct_macros.validate(struct, class_name)|indent(4) }} - } - - mojo::internal::StructHeader header_; -{{struct_macros.fields(struct)}} - - void EncodePointersAndHandles(std::vector<mojo::Handle>* handles) { - {{ struct_macros.encodes(struct)|indent(4) }} - } - - void DecodePointersAndHandles(std::vector<mojo::Handle>* handles) { - {{ struct_macros.decodes(struct)|indent(4) }} - } - - private: - {{class_name}}() { - header_.num_bytes = sizeof(*this); - header_.num_fields = {{struct.packed.packed_fields|length}}; - } -}; -static_assert(sizeof({{class_name}}) == {{struct.packed|struct_size}}, - "Bad sizeof({{class_name}})"); diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl deleted file mode 100644 index 34c0f11..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl +++ /dev/null @@ -1,22 +0,0 @@ -{%- import "struct_macros.tmpl" as struct_macros %} -{%- set class_name = struct.name ~ "_Data" -%} - -class {{class_name}} { - public: - static {{class_name}}* New(mojo::internal::Buffer* buf); - - static bool Validate(const void* data, - mojo::internal::BoundsChecker* bounds_checker); - - mojo::internal::StructHeader header_; -{{struct_macros.fields(struct)}} - - void EncodePointersAndHandles(std::vector<mojo::Handle>* handles); - void DecodePointersAndHandles(std::vector<mojo::Handle>* handles); - - private: - {{class_name}}(); - ~{{class_name}}() = delete; -}; -static_assert(sizeof({{class_name}}) == {{struct.packed|struct_size}}, - "Bad sizeof({{class_name}})"); diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl deleted file mode 100644 index 461f158..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl +++ /dev/null @@ -1,28 +0,0 @@ -{%- import "struct_macros.tmpl" as struct_macros %} -{%- set class_name = struct.name ~ "_Data" %} - -// static -{{class_name}}* {{class_name}}::New(mojo::internal::Buffer* buf) { - return new (buf->Allocate(sizeof({{class_name}}))) {{class_name}}(); -} - -// static -bool {{class_name}}::Validate(const void* data, - mojo::internal::BoundsChecker* bounds_checker) { - {{ struct_macros.validate(struct, class_name)|indent(2) }} -} - -{{class_name}}::{{class_name}}() { - header_.num_bytes = sizeof(*this); - header_.num_fields = {{struct.packed.packed_fields|length}}; -} - -void {{class_name}}::EncodePointersAndHandles( - std::vector<mojo::Handle>* handles) { - {{ struct_macros.encodes(struct)|indent(2) }} -} - -void {{class_name}}::DecodePointersAndHandles( - std::vector<mojo::Handle>* handles) { - {{ struct_macros.decodes(struct)|indent(2) }} -} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl deleted file mode 100644 index 623ebb4..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl +++ /dev/null @@ -1,124 +0,0 @@ -{%- macro validate(struct, class_name) %} - if (!data) - return true; - - if (!ValidateStructHeader( - data, sizeof({{class_name}}), - {{struct.packed.packed_fields|length}}, bounds_checker)) { - return false; - } - - const {{class_name}}* object = static_cast<const {{class_name}}*>(data); - MOJO_ALLOW_UNUSED_LOCAL(object); - -{%- for packed_field in struct.packed.packed_fields %} -{%- set name = packed_field.field.name %} -{%- set kind = packed_field.field.kind %} -{%- if kind|is_object_kind %} -{%- set wrapper_type = kind|cpp_wrapper_type %} -{%- if not kind|is_nullable_kind %} - if (!object->{{name}}.offset) { - ReportValidationError( - mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, - "null {{name}} field in {{struct.name}} struct"); - return false; - } -{%- endif %} - if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}.offset)) { - ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_POINTER); - return false; - } -{%- if kind|is_array_kind or kind|is_string_kind %} - if (!{{wrapper_type}}::Data_::Validate< - {{kind|get_array_validate_params|indent(10)}}>( - mojo::internal::DecodePointerRaw(&object->{{name}}.offset), - bounds_checker)) { -{%- elif kind|is_map_kind %} - if (!{{wrapper_type}}::Data_::Validate< - {{kind.value_kind|get_map_validate_params|indent(10)}}>( - mojo::internal::DecodePointerRaw(&object->{{name}}.offset), - bounds_checker)) { -{%- elif kind|is_struct_kind %} - if (!{{kind|get_name_for_kind}}::Data_::Validate( - mojo::internal::DecodePointerRaw(&object->{{name}}.offset), - bounds_checker)) { -{%- else %} - if (!{{wrapper_type}}::Data_::Validate( - mojo::internal::DecodePointerRaw(&object->{{name}}.offset), - bounds_checker)) { -{%- endif %} - return false; - } -{%- elif kind|is_any_handle_kind %} -{%- if not kind|is_nullable_kind %} - if (object->{{name}}.value() == mojo::internal::kEncodedInvalidHandleValue) { - ReportValidationError( - mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, - "invalid {{name}} field in {{struct.name}} struct"); - return false; - } -{%- endif %} - if (!bounds_checker->ClaimHandle(object->{{name}})) { - ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_HANDLE); - return false; - } -{%- endif %} -{%- endfor %} - - return true; -{%- endmacro %} - -{%- macro field_line(field) %} -{%- set type = field.kind|cpp_field_type %} -{%- set name = field.name -%} -{%- if field.kind.spec == 'b' -%} - uint8_t {{name}} : 1; -{%- elif field.kind|is_enum_kind -%} - int32_t {{name}}; -{%- else -%} - {{type}} {{name}}; -{%- endif %} -{%- endmacro %} - -{%- macro fields(struct) %} -{%- for packed_field in struct.packed.packed_fields %} - {{field_line(packed_field.field)}} -{%- if not loop.last %} -{%- set next_pf = struct.packed.packed_fields[loop.index0 + 1] %} -{%- set pad = next_pf.offset - (packed_field.offset + packed_field.size) %} -{%- if pad > 0 %} - uint8_t pad{{loop.index0}}_[{{pad}}]; -{%- endif %} -{%- endif %} -{%- endfor -%} - -{%- set num_fields = struct.packed.packed_fields|length %} -{%- if num_fields > 0 %} -{%- set last_field = struct.packed.packed_fields[num_fields - 1] %} -{%- set offset = last_field.offset + last_field.size %} -{%- set pad = offset|get_pad(8) -%} -{%- if pad > 0 %} - uint8_t padfinal_[{{pad}}]; -{%- endif %} -{%- endif %} -{%- endmacro %} - -{%- macro encodes(struct) -%} -{%- for pf in struct.packed.packed_fields %} -{%- if pf.field.kind|is_object_kind %} -mojo::internal::Encode(&{{pf.field.name}}, handles); -{%- elif pf.field.kind|is_any_handle_kind %} -mojo::internal::EncodeHandle(&{{pf.field.name}}, handles); -{%- endif %} -{%- endfor %} -{%- endmacro -%} - -{%- macro decodes(struct) -%} -{%- for pf in struct.packed.packed_fields %} -{%- if pf.field.kind|is_object_kind %} -mojo::internal::Decode(&{{pf.field.name}}, handles); -{%- elif pf.field.kind|is_any_handle_kind %} -mojo::internal::DecodeHandle(&{{pf.field.name}}, handles); -{%- endif %} -{%- endfor %} -{%- endmacro -%} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl deleted file mode 100644 index 604be86..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -size_t GetSerializedSize_(const {{struct.name}}Ptr& input); -void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buffer, - internal::{{struct.name}}_Data** output); -void Deserialize_(internal::{{struct.name}}_Data* input, - {{struct.name}}Ptr* output); diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl deleted file mode 100644 index 1612bbe..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl +++ /dev/null @@ -1,78 +0,0 @@ -size_t GetSerializedSize_(const {{struct.name}}Ptr& input) { - if (!input) - return 0; - size_t size = sizeof(internal::{{struct.name}}_Data); -{%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind %} - size += GetSerializedSize_(input->{{pf.field.name}}); -{%- endfor %} - return size; -} - -void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf, - internal::{{struct.name}}_Data** output) { - if (input) { - internal::{{struct.name}}_Data* result = - internal::{{struct.name}}_Data::New(buf); -{%- for pf in struct.packed.packed_fields %} -{%- if pf.field.kind|is_object_kind %} -{%- if pf.field.kind|is_array_kind %} - mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}}>( - mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr); -{%- elif pf.field.kind|is_map_kind %} - mojo::SerializeMap_<{{pf.field.kind.value_kind|get_map_validate_params|indent(26)}}>( - mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr); -{%- else %} - Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr); -{%- endif %} -{%- if not pf.field.kind|is_nullable_kind %} - MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( - !result->{{pf.field.name}}.ptr, - mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, - "null {{pf.field.name}} field in {{struct.name}} struct"); -{%- endif %} -{%- elif pf.field.kind|is_any_handle_kind %} -{%- if pf.field.kind|is_interface_kind %} - result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().release(); -{%- else %} - result->{{pf.field.name}} = input->{{pf.field.name}}.release(); -{%- endif %} -{%- if not pf.field.kind|is_nullable_kind %} - MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( - !result->{{pf.field.name}}.is_valid(), - mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, - "invalid {{pf.field.name}} field in {{struct.name}} struct"); -{%- endif %} -{%- else %} - result->{{pf.field.name}} = input->{{pf.field.name}}; -{%- endif %} -{%- endfor %} - *output = result; - } else { - *output = nullptr; - } -} - -void Deserialize_(internal::{{struct.name}}_Data* input, - {{struct.name}}Ptr* output) { - if (input) { - {{struct.name}}Ptr result({{struct.name}}::New()); -{%- for pf in struct.packed.packed_fields %} -{%- if pf.field.kind|is_object_kind %} - Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}}); -{%- elif pf.field.kind|is_interface_kind %} - if (input->{{pf.field.name}}.is_valid()) - result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&input->{{pf.field.name}}))); -{%- elif pf.field.kind|is_any_handle_kind %} - result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.field.name}})); -{%- elif pf.field.kind|is_enum_kind %} - result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>( - input->{{pf.field.name}}); -{%- else %} - result->{{pf.field.name}} = input->{{pf.field.name}}; -{%- endif %} -{%- endfor %} - *output = result.Pass(); - } else { - output->reset(); - } -} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl deleted file mode 100644 index a29df07..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl +++ /dev/null @@ -1,67 +0,0 @@ -size_t GetSerializedSize_(const {{union.name}}Ptr& input) { - if (!input) - return 0; - - size_t size = sizeof(internal::{{union.name}}_Data); - switch (input->which()) { -{% for field in union.fields %} -{% if field.kind|is_string_kind %} - case {{union.name}}::Tag::{{field.name|upper}}: - size += GetSerializedSize_(input->get_{{field.name}}()); - break; -{%- endif %} -{%- endfor %} - default: - break; - } - return size; -} - - -void Serialize_({{union.name}}Ptr input, mojo::internal::Buffer* buf, - internal::{{union.name}}_Data** output) { - if (input) { - mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get()); - internal::{{union.name}}_Data* result = - internal::{{union.name}}_Data::New(buf); - // TODO(azani): Handle unknown and objects. - result->tag = input->which(); - switch (input->which()) { -{% for field in union.fields %} - case {{union.name}}::Tag::{{field.name|upper}}: -{% if field.kind|is_string_kind %} - Serialize_(input_acc.data()->{{field.name}}, buf, &result->data.{{field.name}}.ptr); -{% else %} - result->data.{{field.name}} = input_acc.data()->{{field.name}}; -{%- endif %} - break; -{%- endfor %} - } - *output = result; - } else { - *output = nullptr; - } -} - -void Deserialize_(internal::{{union.name}}_Data* input, - {{union.name}}Ptr* output) { - if (input) { - {{union.name}}Ptr result({{union.name}}::New()); - mojo::internal::UnionAccessor<{{union.name}}> result_acc(result.get()); - switch (input->tag) { -{% for field in union.fields %} - case {{union.name}}::Tag::{{field.name|upper}}: -{% if field.kind|is_string_kind %} - result_acc.SwitchActive({{union.name}}::Tag::{{field.name|upper}}); - Deserialize_(input->data.{{field.name}}.ptr, &result_acc.data()->{{field.name}}); -{% else %} - result->set_{{field.name}}(input->data.{{field.name}}); -{%- endif %} - break; -{%- endfor %} - } - *output = result.Pass(); - } else { - output->reset(); - } -} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl deleted file mode 100644 index 25b39b3..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl +++ /dev/null @@ -1,41 +0,0 @@ - -class {{struct.name}} { - public: - typedef internal::{{struct.name}}_Data Data_; - -{#--- Constants #} -{%- for constant in struct.constants %} - static const {{constant.kind|cpp_pod_type}} {{constant.name}}; -{%- endfor %} -{#--- Enums #} -{%- for enum in struct.enums -%} -{% macro enum_def() %}{% include "enum_declaration.tmpl" %}{% endmacro %} - {{enum_def()|indent(2)}} -{%- endfor %} - static {{struct.name}}Ptr New(); - - template <typename U> - static {{struct.name}}Ptr From(const U& u) { - return mojo::TypeConverter<{{struct.name}}Ptr, U>::Convert(u); - } - - template <typename U> - U To() const { - return mojo::TypeConverter<U, {{struct.name}}>::Convert(*this); - } - - {{struct.name}}(); - ~{{struct.name}}(); - -{% if struct|is_cloneable_kind %} - {{struct.name}}Ptr Clone() const; -{%- endif %} - bool Equals(const {{struct.name}}& other) const; - -{#--- Getters #} -{% for field in struct.fields %} -{%- set type = field.kind|cpp_wrapper_type %} -{%- set name = field.name %} - {{type}} {{name}}; -{%- endfor %} -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl deleted file mode 100644 index da93e07..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl +++ /dev/null @@ -1,37 +0,0 @@ -// static -{{struct.name}}Ptr {{struct.name}}::New() { - {{struct.name}}Ptr rv; - mojo::internal::StructHelper<{{struct.name}}>::Initialize(&rv); - return rv.Pass(); -} - -{{struct.name}}::{{struct.name}}() -{%- for field in struct.fields %} - {% if loop.first %}:{% else %} {% endif %} {{field.name}}({{field|default_value}}){% if not loop.last %},{% endif %} -{%- endfor %} { -} - -{{struct.name}}::~{{struct.name}}() { -} - -{% if struct|is_cloneable_kind %} -{{struct.name}}Ptr {{struct.name}}::Clone() const { - {{struct.name}}Ptr rv(New()); -{%- for field in struct.fields %} -{%- if field.kind|is_struct_kind or field.kind|is_array_kind or field.kind|is_map_kind %} - rv->{{field.name}} = {{field.name}}.Clone(); -{%- else %} - rv->{{field.name}} = {{field.name}}; -{%- endif %} -{%- endfor %} - return rv.Pass(); -} -{% endif %} - -bool {{struct.name}}::Equals(const {{struct.name}}& other) const { -{%- for field in struct.fields %} - if (!mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equals({{field.name}}, other.{{field.name}})) - return false; -{%- endfor %} - return true; -} diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl deleted file mode 100644 index 91ea7cf..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl +++ /dev/null @@ -1,50 +0,0 @@ -class {{union.name}} { - public: - typedef internal::{{union.name}}_Data Data_; - typedef Data_::{{union.name}}_Tag Tag; - - static {{union.name}}Ptr New(); - - template <typename U> - static {{union.name}}Ptr From(const U& u) { - return mojo::TypeConverter<{{union.name}}Ptr, U>::Convert(u); - } - - template <typename U> - U To() const { - return mojo::TypeConverter<U, {{union.name}}>::Convert(*this); - } - - {{union.name}}(); - ~{{union.name}}(); - -{% if union|is_cloneable_kind %} - {{union.name}}Ptr Clone() const; -{%- endif %} - bool Equals(const {{union.name}}& other) const; - - Tag which() const { - return tag_; - } - -{% for field in union.fields %} - bool is_{{field.name}}() const; - {{field.kind|cpp_result_type}} get_{{field.name}}() const; - void set_{{field.name}}({{field.kind|cpp_const_wrapper_type}} {{field.name}}); -{%- endfor %} - - private: - friend class mojo::internal::UnionAccessor<{{union.name}}>; - union Union_ { - Union_() {} - ~Union_() {} -{% for field in union.fields %} - {{field.kind|cpp_wrapper_type}} {{field.name}}; -{%- endfor %} - }; - void SwitchActive(Tag new_active); - void SetActive(Tag new_active); - void DestroyActive(); - Tag tag_; - Union_ data_; -}; diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl deleted file mode 100644 index bab528c..0000000 --- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl +++ /dev/null @@ -1,96 +0,0 @@ -// static -{{union.name}}Ptr {{union.name}}::New() { - {{union.name}}Ptr rv; - mojo::internal::StructHelper<{{union.name}}>::Initialize(&rv); - return rv.Pass(); -} - -{{union.name}}::{{union.name}}() { - // TODO(azani): Implement default values here when/if we support them. - // TODO(azani): Set to UNKNOWN when unknown is implemented. - SetActive(static_cast<Tag>(0)); -} - -{{union.name}}::~{{union.name}}() { - DestroyActive(); -} - -{% if union|is_cloneable_kind %} -{{union.name}}Ptr {{union.name}}::Clone() const { - {{union.name}}Ptr rv(New()); - switch (tag_) { -{% for field in union.fields %} - case Tag::{{field.name|upper}}: - rv->set_{{field.name}}(data_.{{field.name}}); - break; -{%- endfor %} - }; - return rv.Pass(); -} -{%- endif %} - -bool {{union.name}}::Equals(const {{union.name}}& other) const { - if (tag_ != other.which()) { - return false; - } - - switch (tag_) { -{% for field in union.fields %} - case Tag::{{field.name|upper}}: - return mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equals(data_.{{field.name}}, other.get_{{field.name}}()); -{%- endfor %} - }; - - return false; -} - -{% for field in union.fields %} -bool {{union.name}}::is_{{field.name}}() const { - return tag_ == Tag::{{field.name|upper}}; -} - -{{field.kind|cpp_result_type}} {{union.name}}::get_{{field.name}}() const { - MOJO_DCHECK(tag_ == Tag::{{field.name|upper}}); - return data_.{{field.name}}; -} - -void {{union.name}}::set_{{field.name}}({{field.kind|cpp_const_wrapper_type}} {{field.name}}) { - SwitchActive(Tag::{{field.name|upper}}); - data_.{{field.name}} = {{field.name}}; -} -{%- endfor %} - -void {{union.name}}::SwitchActive(Tag new_active) { - if (new_active == tag_) { - return; - } - - DestroyActive(); - SetActive(new_active); -} - -void {{union.name}}::SetActive(Tag new_active) { - switch (new_active) { -{% for field in union.fields %} - case Tag::{{field.name|upper}}: -{% if field.kind|is_string_kind %} - new (&data_.{{field.name}}) String(); -{%- endif %} - break; -{%- endfor %} - } - - tag_ = new_active; -} - -void {{union.name}}::DestroyActive() { - switch (tag_) { -{% for field in union.fields %} - case Tag::{{field.name|upper}}: -{% if field.kind|is_string_kind %} - data_.{{field.name}}.~String(); -{%- endif %} - break; -{%- endfor %} - } -} |