OLD | NEW |
1 class {{export_attribute}} {{union.name}} { | 1 class {{export_attribute}} {{union.name}} { |
2 public: | 2 public: |
3 using DataView = {{union.name}}DataView; | 3 using DataView = {{union.name}}DataView; |
4 using Data_ = internal::{{union.name}}_Data; | 4 using Data_ = internal::{{union.name}}_Data; |
5 using Tag = Data_::{{union.name}}_Tag; | 5 using Tag = Data_::{{union.name}}_Tag; |
6 | 6 |
7 static {{union.name}}Ptr New(); | 7 static {{union.name}}Ptr New() { |
| 8 return {{union.name}}Ptr(base::in_place); |
| 9 } |
| 10 |
| 11 {%- for field in union.fields %} |
| 12 // Construct an instance holding |{{field.name}}|. |
| 13 static {{union.name}}Ptr |
| 14 New{{field.name|under_to_camel}}( |
| 15 {{field.kind|cpp_wrapper_param_type}} {{field.name}}) { |
| 16 auto result = {{union.name}}Ptr(base::in_place); |
| 17 result->set_{{field.name}}(std::move({{field.name}})); |
| 18 return result; |
| 19 } |
| 20 {%- endfor %} |
8 | 21 |
9 template <typename U> | 22 template <typename U> |
10 static {{union.name}}Ptr From(const U& u) { | 23 static {{union.name}}Ptr From(const U& u) { |
11 return mojo::TypeConverter<{{union.name}}Ptr, U>::Convert(u); | 24 return mojo::TypeConverter<{{union.name}}Ptr, U>::Convert(u); |
12 } | 25 } |
13 | 26 |
14 template <typename U> | 27 template <typename U> |
15 U To() const { | 28 U To() const { |
16 return mojo::TypeConverter<U, {{union.name}}>::Convert(*this); | 29 return mojo::TypeConverter<U, {{union.name}}>::Convert(*this); |
17 } | 30 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 return *(data_.{{field.name}}); | 64 return *(data_.{{field.name}}); |
52 {%- else %} | 65 {%- else %} |
53 return data_.{{field.name}}; | 66 return data_.{{field.name}}; |
54 {%- endif %} | 67 {%- endif %} |
55 } | 68 } |
56 | 69 |
57 void set_{{field.name}}({{field.kind|cpp_wrapper_param_type}} {{field.name}}); | 70 void set_{{field.name}}({{field.kind|cpp_wrapper_param_type}} {{field.name}}); |
58 {%- endfor %} | 71 {%- endfor %} |
59 | 72 |
60 private: | 73 private: |
61 friend class mojo::internal::UnionAccessor<{{union.name}}>; | |
62 union Union_ { | 74 union Union_ { |
63 Union_() {} | 75 Union_() {} |
64 ~Union_() {} | 76 ~Union_() {} |
65 | 77 |
66 {%- for field in union.fields %} | 78 {%- for field in union.fields %} |
67 {%- if field.kind|is_object_kind or | 79 {%- if field.kind|is_object_kind or |
68 field.kind|is_any_handle_or_interface_kind %} | 80 field.kind|is_any_handle_or_interface_kind %} |
69 {{field.kind|cpp_wrapper_type}}* {{field.name}}; | 81 {{field.kind|cpp_wrapper_type}}* {{field.name}}; |
70 {%- else %} | 82 {%- else %} |
71 {{field.kind|cpp_wrapper_type}} {{field.name}}; | 83 {{field.kind|cpp_wrapper_type}} {{field.name}}; |
72 {%- endif %} | 84 {%- endif %} |
73 {%- endfor %} | 85 {%- endfor %} |
74 }; | 86 }; |
75 void SwitchActive(Tag new_active); | |
76 void SetActive(Tag new_active); | |
77 void DestroyActive(); | 87 void DestroyActive(); |
78 Tag tag_; | 88 Tag tag_; |
79 Union_ data_; | 89 Union_ data_; |
80 }; | 90 }; |
OLD | NEW |