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

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

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 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
(Empty)
1 // static
2 {{union.name}}Ptr {{union.name}}::New() {
3 {{union.name}}Ptr rv;
4 mojo::internal::StructHelper<{{union.name}}>::Initialize(&rv);
5 return rv;
6 }
7
8 {{union.name}}::{{union.name}}() {
9 // TODO(azani): Implement default values here when/if we support them.
10 tag_ = Tag::__UNKNOWN__;
11 }
12
13 {{union.name}}::~{{union.name}}() {
14 DestroyActive();
15 }
16
17 {% if union|is_cloneable_kind %}
18 {{union.name}}Ptr {{union.name}}::Clone() const {
19 {{union.name}}Ptr rv(New());
20 switch (tag_) {
21 {% for field in union.fields %}
22 case Tag::{{field.name|upper}}:
23 {% if field.kind|is_string_kind %}
24 rv->set_{{field.name}}(*(data_.{{field.name}}));
25 {% elif field.kind|is_object_kind %}
26 rv->set_{{field.name}}(data_.{{field.name}}->Clone());
27 {%- else %}
28 rv->set_{{field.name}}(data_.{{field.name}});
29 {%- endif %}
30 break;
31 {%- endfor %}
32 case Tag::__UNKNOWN__:
33 break;
34 };
35 return rv;
36 }
37 {%- endif %}
38
39 bool {{union.name}}::Equals(const {{union.name}}& other) const {
40 if (tag_ != other.which()) {
41 return false;
42 }
43
44 switch (tag_) {
45 {% for field in union.fields %}
46 case Tag::{{field.name|upper}}:
47 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind
48 or field.kind|is_interface_kind %}
49 return mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equal s(*(data_.{{field.name}}), *(other.data_.{{field.name}}));
50 {%- else %}
51 return mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equal s(data_.{{field.name}}, other.data_.{{field.name}});
52 {%- endif %}
53 {%- endfor %}
54 case Tag::__UNKNOWN__:
55 return false;
56 };
57
58 return false;
59 }
60
61 {% for field in union.fields %}
62 bool {{union.name}}::is_{{field.name}}() const {
63 return tag_ == Tag::{{field.name|upper}};
64 }
65
66 {{field.kind|cpp_union_getter_return_type}} {{union.name}}::get_{{field.name}}() const {
67 MOJO_DCHECK(tag_ == Tag::{{field.name|upper}});
68 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind
69 or field.kind|is_interface_kind %}
70 return *(data_.{{field.name}});
71 {%- else %}
72 return data_.{{field.name}};
73 {%- endif %}
74 }
75
76 void {{union.name}}::set_{{field.name}}({{field.kind|cpp_const_wrapper_type}} {{ field.name}}) {
77 SwitchActive(Tag::{{field.name|upper}});
78 {% if field.kind|is_string_kind %}
79 *(data_.{{field.name}}) = {{field.name}};
80 {% elif field.kind|is_object_kind or field.kind|is_interface_kind %}
81 *(data_.{{field.name}}) = {{field.name}}.Pass();
82 {% elif field.kind|is_any_handle_kind %}
83 data_.{{field.name}}->reset({{field.name}}.release());
84 {%- else %}
85 data_.{{field.name}} = {{field.name}};
86 {%- endif %}
87 }
88 {%- endfor %}
89
90 bool {{union.name}}::has_unknown_tag() const {
91 return tag_ == Tag::__UNKNOWN__;
92 }
93
94 void {{union.name}}::SwitchActive(Tag new_active) {
95 if (new_active == tag_) {
96 return;
97 }
98
99 DestroyActive();
100 SetActive(new_active);
101 }
102
103 void {{union.name}}::SetActive(Tag new_active) {
104 switch (new_active) {
105 {% for field in union.fields %}
106 case Tag::{{field.name|upper}}:
107 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind
108 or field.kind|is_interface_kind %}
109 data_.{{field.name}} = new {{field.kind|cpp_wrapper_type}}();
110 {%- endif %}
111 break;
112 {%- endfor %}
113 case Tag::__UNKNOWN__:
114 MOJO_DCHECK(false) << "Do not set a union tag to unknown.";
115 break;
116 }
117
118 tag_ = new_active;
119 }
120
121 void {{union.name}}::DestroyActive() {
122 switch (tag_) {
123 {% for field in union.fields %}
124 case Tag::{{field.name|upper}}:
125 {% if field.kind|is_object_kind or field.kind|is_any_handle_kind
126 or field.kind|is_interface_kind %}
127 delete data_.{{field.name}};
128 {%- endif %}
129 break;
130 {%- endfor %}
131 default:
132 break;
133 }
134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698