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

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/union_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 {%- import "validation_macros.tmpl" as validation_macros %}
2 {%- set class_name = union.name ~ "_Data" %}
3 {%- set enum_name = union.name ~ "_Tag" -%}
4
5 // static
6 {{class_name}}* {{class_name}}::New(mojo::internal::Buffer* buf) {
7 return new (buf->Allocate(sizeof({{class_name}}))) {{class_name}}();
8 }
9
10 {# TODO(vardhan): Set error messages here for the remaining validation
11 errors. #}
12 // static
13 mojo::internal::ValidationError {{class_name}}::Validate(
14 const void* data,
15 mojo::internal::BoundsChecker* bounds_checker,
16 bool inlined,
17 std::string* err) {
18 if (!data)
19 return mojo::internal::ValidationError::NONE;
20
21 if (!mojo::internal::IsAligned(data)) {
22 MOJO_INTERNAL_DEBUG_SET_ERROR_MSG(err) << "";
23 return mojo::internal::ValidationError::MISALIGNED_OBJECT;
24 }
25
26 // If the union is inlined in another structure its memory was already claimed .
27 // This ONLY applies to the union itself, NOT anything which the union points
28 // to.
29 if (!inlined && !bounds_checker->ClaimMemory(data, sizeof({{class_name}}))) {
30 MOJO_INTERNAL_DEBUG_SET_ERROR_MSG(err) << "";
31 return mojo::internal::ValidationError::ILLEGAL_MEMORY_RANGE;
32 }
33
34 const {{class_name}}* object = static_cast<const {{class_name}}*>(data);
35 MOJO_ALLOW_UNUSED_LOCAL(object);
36
37 if (object->is_null())
38 return mojo::internal::ValidationError::NONE;
39
40 switch (object->tag) {
41 {% for field in union.fields %}
42 case {{enum_name}}::{{field.name|upper}}: {
43 {{ validation_macros.validate_union_field(field, union, "err")|indent(8) }}
44 }
45 {%- endfor %}
46 default:
47 // Unknown tags should not cause validation to fail.
48 break;
49 }
50 return mojo::internal::ValidationError::NONE;
51 }
52
53 void {{class_name}}::set_null() {
54 size = 0U;
55 tag = static_cast<{{enum_name}}>(0);
56 data.unknown = 0U;
57 }
58
59 {{class_name}}::{{class_name}}() {
60 }
61
62 void {{class_name}}::EncodePointersAndHandles(
63 std::vector<mojo::Handle>* handles) {
64 switch (tag) {
65 {%- for field in union.fields %}
66 case {{enum_name}}::{{field.name|upper}}: {
67 {%- if field.kind|is_object_kind %}
68 mojo::internal::Encode(&data.f_{{field.name}}, handles);
69 {%- elif field.kind|is_any_handle_kind %}
70 mojo::internal::EncodeHandle(&data.f_{{field.name}}, handles);
71 {%- elif field.kind|is_interface_kind %}
72 mojo::internal::EncodeHandle(
73 reinterpret_cast<mojo::internal::Interface_Data*>(
74 &data.f_{{field.name}}), handles);
75 {%- endif %}
76 return;
77 }
78 {%- endfor %}
79 case {{enum_name}}::__UNKNOWN__: {
80 MOJO_DCHECK(false) << "No sane way to serialize a union with an unknown ta g.";
81 break;
82 }
83 }
84 }
85
86 void {{class_name}}::DecodePointersAndHandles(
87 std::vector<mojo::Handle>* handles) {
88 switch (tag) {
89 {%- for field in union.fields %}
90 case {{enum_name}}::{{field.name|upper}}: {
91 {%- if field.kind|is_object_kind %}
92 mojo::internal::Decode(&data.f_{{field.name}}, handles);
93 {%- elif field.kind|is_any_handle_kind %}
94 mojo::internal::DecodeHandle(&data.f_{{field.name}}, handles);
95 {%- elif field.kind|is_interface_kind %}
96 mojo::internal::DecodeHandle(
97 reinterpret_cast<mojo::internal::Interface_Data*>(
98 &data.f_{{field.name}}), handles);
99 {%- endif %}
100 return;
101 }
102 {%- endfor %}
103 default:
104 return;
105 }
106 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698