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

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

Issue 2031823002: Mojo C++ bindings: more consistent Clone() and Equals(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 // 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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698