OLD | NEW |
1 // static | 1 // static |
2 {{union.name}}Ptr {{union.name}}::New() { | 2 {{union.name}}Ptr {{union.name}}::New() { |
3 {{union.name}}Ptr rv; | 3 {{union.name}}Ptr rv; |
4 mojo::internal::StructHelper<{{union.name}}>::Initialize(&rv); | 4 mojo::internal::StructHelper<{{union.name}}>::Initialize(&rv); |
5 return rv; | 5 return rv; |
6 } | 6 } |
7 | 7 |
8 {{union.name}}::{{union.name}}() { | 8 {{union.name}}::{{union.name}}() { |
9 // TODO(azani): Implement default values here when/if we support them. | 9 // TODO(azani): Implement default values here when/if we support them. |
10 // TODO(azani): Set to UNKNOWN when unknown is implemented. | 10 // TODO(azani): Set to UNKNOWN when unknown is implemented. |
11 SetActive(static_cast<Tag>(0)); | 11 SetActive(static_cast<Tag>(0)); |
12 } | 12 } |
13 | 13 |
14 {{union.name}}::~{{union.name}}() { | 14 {{union.name}}::~{{union.name}}() { |
15 DestroyActive(); | 15 DestroyActive(); |
16 } | 16 } |
17 | 17 |
18 {% if union|is_cloneable_kind %} | |
19 {{union.name}}Ptr {{union.name}}::Clone() const { | |
20 {{union.name}}Ptr rv(New()); | |
21 switch (tag_) { | |
22 {% for field in union.fields %} | |
23 case Tag::{{field.name|upper}}: | |
24 {% if field.kind|is_string_kind %} | |
25 rv->set_{{field.name}}(*(data_.{{field.name}})); | |
26 {% elif field.kind|is_object_kind %} | |
27 rv->set_{{field.name}}(data_.{{field.name}}->Clone()); | |
28 {%- else %} | |
29 rv->set_{{field.name}}(data_.{{field.name}}); | |
30 {%- endif %} | |
31 break; | |
32 {%- endfor %} | |
33 }; | |
34 return rv; | |
35 } | |
36 {%- endif %} | |
37 | |
38 bool {{union.name}}::Equals(const {{union.name}}& other) const { | |
39 if (tag_ != other.which()) { | |
40 return false; | |
41 } | |
42 | |
43 switch (tag_) { | |
44 {% for field in union.fields %} | |
45 case Tag::{{field.name|upper}}: | |
46 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind or | |
47 field.kind|is_interface_kind or field.kind|is_associated_kind %} | |
48 return mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equal
s(*(data_.{{field.name}}), *(other.data_.{{field.name}})); | |
49 {%- else %} | |
50 return mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equal
s(data_.{{field.name}}, other.data_.{{field.name}}); | |
51 {%- endif %} | |
52 {%- endfor %} | |
53 }; | |
54 | |
55 return false; | |
56 } | |
57 | |
58 {% for field in union.fields %} | 18 {% for field in union.fields %} |
59 bool {{union.name}}::is_{{field.name}}() const { | 19 bool {{union.name}}::is_{{field.name}}() const { |
60 return tag_ == Tag::{{field.name|upper}}; | 20 return tag_ == Tag::{{field.name|upper}}; |
61 } | 21 } |
62 | 22 |
63 {{field.kind|cpp_union_getter_return_type}} {{union.name}}::get_{{field.name}}()
const { | 23 {{field.kind|cpp_union_getter_return_type}} {{union.name}}::get_{{field.name}}()
const { |
64 DCHECK(tag_ == Tag::{{field.name|upper}}); | 24 DCHECK(tag_ == Tag::{{field.name|upper}}); |
65 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind or | 25 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind or |
66 field.kind|is_interface_kind or field.kind|is_associated_kind %} | 26 field.kind|is_interface_kind or field.kind|is_associated_kind %} |
67 return *(data_.{{field.name}}); | 27 return *(data_.{{field.name}}); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 {% for field in union.fields %} | 74 {% for field in union.fields %} |
115 case Tag::{{field.name|upper}}: | 75 case Tag::{{field.name|upper}}: |
116 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind or | 76 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind or |
117 field.kind|is_interface_kind or field.kind|is_associated_kind %} | 77 field.kind|is_interface_kind or field.kind|is_associated_kind %} |
118 delete data_.{{field.name}}; | 78 delete data_.{{field.name}}; |
119 {%- endif %} | 79 {%- endif %} |
120 break; | 80 break; |
121 {%- endfor %} | 81 {%- endfor %} |
122 } | 82 } |
123 } | 83 } |
OLD | NEW |