Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl

Issue 2694843003: Add field-initializing factory static methods to generated mojo unions. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698