OLD | NEW |
| (Empty) |
1 class {{struct.name}} { | |
2 public: | |
3 typedef internal::{{struct.name}}_Data Data; | |
4 | |
5 {#--- Enums #} | |
6 {%- for enum in struct.enums -%} | |
7 {% macro enum_def() %}{% include "enum_declaration.tmpl" %}{% endmacro %} | |
8 {{enum_def()|indent(2)}} | |
9 {%- endfor %} | |
10 | |
11 {{struct.name}}() : data_(NULL) { | |
12 } | |
13 | |
14 template <typename U> | |
15 {{struct.name}}(const U& u, mojo::Buffer* buf = mojo::Buffer::current()) { | |
16 *this = mojo::TypeConverter<{{struct.name}},U>::ConvertFrom(u, buf); | |
17 } | |
18 | |
19 template <typename U> | |
20 {{struct.name}}& operator=(const U& u) { | |
21 *this = mojo::TypeConverter<{{struct.name}},U>::ConvertFrom(u, mojo::Buffer:
:current()); | |
22 return *this; | |
23 } | |
24 | |
25 template <typename U> | |
26 operator U() const { | |
27 return To<U>(); | |
28 } | |
29 | |
30 template <typename U> | |
31 U To() const { | |
32 return mojo::TypeConverter<{{struct.name}},U>::ConvertTo(*this); | |
33 } | |
34 | |
35 bool is_null() const { return !data_; } | |
36 | |
37 {#--- Getters #} | |
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}}()); } | |
48 {%- else %} | |
49 {{type}} {{name}}() const { return data_->{{name}}(); } | |
50 {%- endif %} | |
51 {%- endfor %} | |
52 | |
53 class Builder { | |
54 public: | |
55 explicit Builder(mojo::Buffer* buf = mojo::Buffer::current()); | |
56 | |
57 {#--- Setters #} | |
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()); } | |
67 {%- else %} | |
68 void set_{{name}}({{type}} {{name}}) { {# | |
69 #}data_->set_{{name}}({{name}}); } | |
70 {%- endif %} | |
71 {%- endfor %} | |
72 | |
73 {{struct.name}} Finish(); | |
74 | |
75 private: | |
76 {{struct.name}}::Data* data_; | |
77 MOJO_DISALLOW_COPY_AND_ASSIGN(Builder); | |
78 }; | |
79 | |
80 private: | |
81 friend class mojo::internal::WrapperHelper<{{struct.name}}>; | |
82 | |
83 struct Wrap {}; | |
84 {{struct.name}}(Wrap, const Data* data) : data_(data) {} | |
85 | |
86 const Data* data_; | |
87 }; | |
OLD | NEW |