| Index: mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl
|
| 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 826ca216e9cf8c258461232cbfa7d1b82bd489b0..0000000000000000000000000000000000000000
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl
|
| +++ /dev/null
|
| @@ -1,172 +0,0 @@
|
| -{% import 'struct_macros.tmpl' as struct_macros without context %}
|
| -{# Assumes |input| is an InlinedStruct. #}
|
| -size_t GetSerializedSize_(const {{union.name}}Ptr& input) {
|
| - size_t size = sizeof(internal::{{union.name}}_Data);
|
| - if (!input)
|
| - return size;
|
| -
|
| - mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get());
|
| - switch (input->which()) {
|
| -{% for field in union.fields %}
|
| -{% if field.kind|is_object_kind %}
|
| - case {{union.name}}::Tag::{{field.name|upper}}:
|
| -{% if field.kind|is_union_kind %}
|
| - if ((input_acc.data()->{{field.name}})) {
|
| - //size += sizeof(mojo::internal::UnionPointer<{{field.kind|get_name_for_kind}}::Data_>);
|
| - size += GetSerializedSize_(*(input_acc.data()->{{field.name}}));
|
| - }
|
| -{% elif field.kind|is_struct_kind %}
|
| - size += GetSerializedSize_(*(input_acc.data()->{{field.name}}->get()));
|
| -{% else %}
|
| - size += GetSerializedSize_(*(input_acc.data()->{{field.name}}));
|
| -{% endif %}
|
| - break;
|
| -{%- endif %}
|
| -{%- endfor %}
|
| - default:
|
| - break;
|
| - }
|
| - return size;
|
| -}
|
| -
|
| -{#
|
| - |input|: Could be mutated if it contains handles.
|
| - |buf|: Used to allocate memory, should we need it.
|
| - |output|: Serialize into *output; it is expected that *output points to a
|
| - memory we can serialize into without allocating from |buf|. However,
|
| - if this union contains another union, we will use |buf| to allocate
|
| - memory and serialize out-of-line.
|
| -#}
|
| -mojo::internal::ValidationError SerializeUnion_(
|
| - {{union.name}}* input,
|
| - mojo::internal::Buffer* buf,
|
| - internal::{{union.name}}_Data** output) {
|
| - internal::{{union.name}}_Data* result = *output;
|
| - if (input) {
|
| - mojo::internal::UnionAccessor<{{union.name}}> input_acc(input);
|
| - // TODO(azani): Handle unknown and objects.
|
| - // Set the not-null flag.
|
| - result->size = 16;
|
| - result->tag = input->which();
|
| - switch (input->which()) {
|
| -{% for field in union.fields %}
|
| - case {{union.name}}::Tag::{{field.name|upper}}: {
|
| -{% if field.kind|is_object_kind %}
|
| -{% if field.kind|is_string_kind %}
|
| - SerializeString_(
|
| - *input_acc.data()->{{field.name}},
|
| - buf, &result->data.f_{{field.name}}.ptr);
|
| -{% elif field.kind|is_struct_kind %}
|
| - {{struct_macros.call_serialize_struct(
|
| - input = "input_acc.data()->%s->get()"|format(field.name),
|
| - buffer = "buf",
|
| - output = "&result->data.f_%s.ptr"|format(field.name),
|
| - should_return_errors = true)|indent(6)}}
|
| -{% elif field.kind|is_union_kind %}
|
| - // Point *output to newly allocated memory
|
| - // SerializeUnion_ into newly allocated memory.
|
| - if (!{{"input_acc.data()->%s->get()"|format(field.name)}}) {
|
| - {{"result->data.f_%s.ptr"|format(field.name)}} = nullptr;
|
| - } else {
|
| - {{"result->data.f_%s.ptr"|format(field.name)}} =
|
| - {{field.kind|get_name_for_kind}}::Data_::New(buf);
|
| - {{struct_macros.call_serialize_union(
|
| - input = "input_acc.data()->%s->get()"|format(field.name),
|
| - buffer = "buf",
|
| - output = "&result->data.f_%s.ptr"|format(field.name),
|
| - should_return_errors = true)|indent(8)}}
|
| - }
|
| -{% elif field.kind|is_array_kind %}
|
| - {{struct_macros.call_serialize_array(
|
| - name = field.name,
|
| - kind = field.kind,
|
| - input = "input_acc.data()->%s"|format(field.name),
|
| - buffer = "buf",
|
| - output = "&result->data.f_%s.ptr"|format(field.name),
|
| - should_return_errors = true,
|
| - indent_size = 16)|indent(6)}}
|
| -{% elif field.kind|is_map_kind %}
|
| - {{struct_macros.call_serialize_map(
|
| - name = field.name,
|
| - kind = field.kind,
|
| - input = "input_acc.data()->%s"|format(field.name),
|
| - buffer = "buf",
|
| - output = "&result->data.f_%s.ptr"|format(field.name),
|
| - should_return_errors = true,
|
| - indent_size = 16)|indent(6)}}
|
| -{%- endif %}
|
| -{% elif field.kind|is_any_handle_kind %}
|
| - result->data.f_{{field.name}} =
|
| - input_acc.data()->{{field.name}}->release().value();
|
| -{% elif field.kind|is_interface_kind %}
|
| - mojo::internal::Interface_Data* {{field.name}} =
|
| - reinterpret_cast<mojo::internal::Interface_Data*>(
|
| - &result->data.f_{{field.name}});
|
| - mojo::internal::InterfaceHandleToData(
|
| - input_acc.data()->{{field.name}}->Pass(), {{field.name}});
|
| -{% elif field.kind|is_enum_kind %}
|
| - result->data.f_{{field.name}} =
|
| - static_cast<int32_t>(input_acc.data()->{{field.name}});
|
| -{% else %}
|
| - result->data.f_{{field.name}} = input_acc.data()->{{field.name}};
|
| -{%- endif %}
|
| - break;
|
| - }
|
| -{%- endfor %}
|
| - default:
|
| - // TODO(vardhan): Should this return an error code instead?
|
| - MOJO_CHECK(false) << "No sane way to serialize a union with an unknown tag.";
|
| - break;
|
| - }
|
| - } else {
|
| - result->set_null();
|
| - }
|
| - return mojo::internal::ValidationError::NONE;
|
| -}
|
| -
|
| -void Deserialize_(internal::{{union.name}}_Data* input,
|
| - {{union.name}}* output) {
|
| - if (input && !input->is_null()) {
|
| - mojo::internal::UnionAccessor<{{union.name}}> result_acc(output);
|
| - switch (input->tag) {
|
| -{#- TODO(vardhan): There is a lot of overlap with struct_macros.deserialize()
|
| - here, is it possible to merge? (currently looks very hairy) #}
|
| -{% for field in union.fields %}
|
| - case {{union.name}}::Tag::{{field.name|upper}}: {
|
| -{% if field.kind|is_object_kind %}
|
| - result_acc.SwitchActive({{union.name}}::Tag::{{field.name|upper}});
|
| -{% if field.kind|is_struct_kind or field.kind|is_union_kind %}
|
| - *result_acc.data()->{{field.name}} =
|
| - {{field.kind|get_name_for_kind}}::New();
|
| - Deserialize_(input->data.f_{{field.name}}.ptr,
|
| - result_acc.data()->{{field.name}}->get());
|
| -{% else %}
|
| - Deserialize_(input->data.f_{{field.name}}.ptr, result_acc.data()->{{field.name}});
|
| -{% endif %}
|
| -{% elif field.kind|is_any_handle_kind %}
|
| - {{field.kind|cpp_wrapper_type}}* {{field.name}} =
|
| - reinterpret_cast<{{field.kind|cpp_wrapper_type}}*>(&input->data.f_{{field.name}});
|
| - output->set_{{field.name}}({{field.name}}->Pass());
|
| -{% elif field.kind|is_interface_kind %}
|
| - {{field.kind|cpp_wrapper_type}} {{field.name}}_out;
|
| - mojo::internal::Interface_Data* {{field.name}}_in =
|
| - reinterpret_cast<mojo::internal::Interface_Data*>(
|
| - &input->data.f_{{field.name}});
|
| - mojo::internal::InterfaceDataToHandle(
|
| - {{field.name}}_in, &{{field.name}}_out);
|
| - output->set_{{field.name}}({{field.name}}_out.Pass());
|
| -{% elif field.kind|is_enum_kind %}
|
| - output->set_{{field.name}}(static_cast<{{field.kind|cpp_wrapper_type}}>(input->data.f_{{field.name}}));
|
| -{% else %}
|
| - output->set_{{field.name}}(input->data.f_{{field.name}});
|
| -{%- endif %}
|
| - break;
|
| - }
|
| -{%- endfor %}
|
| - default:
|
| - MOJO_LOG(WARNING) << "Deserializing {{union.name}} with unknown tag!";
|
| - // No way to deserialize the data when we encounter an unknown tag.
|
| - break;
|
| - }
|
| - }
|
| -}
|
|
|