1 class {{struct.name}} {
3 typedef internal::{{struct.name}}_Data Data;
6 {%- for enum in struct.enums -%}
7 {% macro enum_def() %}{% include "enum_declaration.tmpl" %}{% endmacro %}
8 {{enum_def()|indent(2)}}
11 {{struct.name}}() : data_(NULL) {
15 {{struct.name}}(const U& u, mojo::Buffer* buf = mojo::Buffer::current()) {
16 *this = mojo::TypeConverter<{{struct.name}},U>::ConvertFrom(u, buf);
20 {{struct.name}}& operator=(const U& u) {
21 *this = mojo::TypeConverter<{{struct.name}},U>::ConvertFrom(u, mojo::Buffer::current());
32 return mojo::TypeConverter<{{struct.name}},U>::ConvertTo(*this);
35 bool is_null() const { return !data_; }
38 {% for packed_field in struct.packed.packed_fields %}
39 {%- set type = packed_field.field.kind|cpp_wrapper_type %}
40 {%- set name = packed_field.field.name %}
41 {%- if packed_field.field.kind|is_object_kind %}
42 const {{type}} {{name}}() const { {#
43 #}return mojo::internal::Wrap(data_->{{name}}()); }
44 {%- elif packed_field.field.kind|is_handle_kind %}
45 {{type}} {{name}}() const { return mojo::MakePassable(data_->{{name}}()); }
46 {%- elif packed_field.field.kind|is_enum_kind %}
47 {{type}} {{name}}() const { return static_cast<{{type}}>(data_->{{name}}()); }
49 {{type}} {{name}}() const { return data_->{{name}}(); }
55 explicit Builder(mojo::Buffer* buf = mojo::Buffer::current());
58 {% for packed_field in struct.packed.packed_fields %}
59 {%- set type = packed_field.field.kind|cpp_const_wrapper_type %}
60 {%- set name = packed_field.field.name %}
61 {%- if packed_field.field.kind|is_object_kind %}
62 void set_{{name}}({{type}} {{name}}) { {#
63 #}data_->set_{{name}}(mojo::internal::Unwrap({{name}})); }
64 {%- elif packed_field.field.kind|is_handle_kind %}
65 void set_{{name}}({{type}} {{name}}) { {#
66 #}data_->set_{{name}}({{name}}.release()); }
68 void set_{{name}}({{type}} {{name}}) { {#
69 #}data_->set_{{name}}({{name}}); }
73 {{struct.name}} Finish();
76 {{struct.name}}::Data* data_;
77 MOJO_DISALLOW_COPY_AND_ASSIGN(Builder);
81 friend class mojo::internal::WrapperHelper<{{struct.name}}>;
84 {{struct.name}}(Wrap, const Data* data) : data_(data) {}