OLD | NEW |
| (Empty) |
1 class {{union.name}} { | |
2 public: | |
3 using Data_ = internal::{{union.name}}_Data; | |
4 using Tag = Data_::{{union.name}}_Tag; | |
5 | |
6 static {{union.name}}Ptr New(); | |
7 | |
8 template <typename U> | |
9 static {{union.name}}Ptr From(const U& u) { | |
10 return mojo::TypeConverter<{{union.name}}Ptr, U>::Convert(u); | |
11 } | |
12 | |
13 template <typename U> | |
14 U To() const { | |
15 return mojo::TypeConverter<U, {{union.name}}>::Convert(*this); | |
16 } | |
17 | |
18 {{union.name}}(); | |
19 ~{{union.name}}(); | |
20 | |
21 {% if union|is_cloneable_kind %} | |
22 {{union.name}}Ptr Clone() const; | |
23 {%- endif %} | |
24 bool Equals(const {{union.name}}& other) const; | |
25 | |
26 Tag which() const { | |
27 return tag_; | |
28 } | |
29 | |
30 {% for field in union.fields %} | |
31 bool is_{{field.name}}() const; | |
32 {{field.kind|cpp_union_getter_return_type}} get_{{field.name}}() const; | |
33 void set_{{field.name}}({{field.kind|cpp_const_wrapper_type}} {{field.name}}); | |
34 {%- endfor %} | |
35 bool has_unknown_tag() const; | |
36 | |
37 private: | |
38 friend class mojo::internal::UnionAccessor<{{union.name}}>; | |
39 union Union_ { | |
40 Union_() {} | |
41 ~Union_() {} | |
42 {% for field in union.fields %} | |
43 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind | |
44 or field.kind|is_interface_kind -%} | |
45 {{field.kind|cpp_wrapper_type}}* {{field.name}}; | |
46 {% else -%} | |
47 {{field.kind|cpp_wrapper_type}} {{field.name}}; | |
48 {% endif -%} | |
49 {%- endfor %} | |
50 }; | |
51 void SwitchActive(Tag new_active); | |
52 void SetActive(Tag new_active); | |
53 void DestroyActive(); | |
54 Tag tag_; | |
55 Union_ data_; | |
56 }; | |
OLD | NEW |