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

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

Issue 1833033003: C++ Bindings: Remove 'inline' arg from generated union serialization functions. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/union_serialization_declaration.tmpl ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 {% import 'struct_macros.tmpl' as struct_macros without context %} 1 {% import 'struct_macros.tmpl' as struct_macros without context %}
2 size_t GetSerializedSize_(const {{union.name}}Ptr& input, bool inlined) { 2 {# Assumes |input| is an InlinedStruct. #}
3 size_t size = 0U; 3 size_t GetSerializedSize_(const {{union.name}}Ptr& input) {
4 if (!inlined) { 4 size_t size = sizeof(internal::{{union.name}}_Data);
5 size += sizeof(internal::{{union.name}}_Data); 5 if (!input)
6 } 6 return size;
7 7
8 if (!input)
9 return size;
10
11 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get()); 8 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get());
12 switch (input->which()) { 9 switch (input->which()) {
13 {% for field in union.fields %} 10 {% for field in union.fields %}
14 {% if field.kind|is_object_kind %} 11 {% if field.kind|is_object_kind %}
15 case {{union.name}}::Tag::{{field.name|upper}}: 12 case {{union.name}}::Tag::{{field.name|upper}}:
16 {% if field.kind|is_union_kind %} 13 {% if field.kind|is_union_kind %}
17 size += GetSerializedSize_(*(input_acc.data()->{{field.name}}), false); 14 if ((input_acc.data()->{{field.name}})) {
15 //size += sizeof(mojo::internal::UnionPointer<{{field.kind|get_name_for_ kind}}::Data_>);
16 size += GetSerializedSize_(*(input_acc.data()->{{field.name}}));
17 }
18 {% elif field.kind|is_struct_kind %} 18 {% elif field.kind|is_struct_kind %}
19 size += GetSerializedSize_(*(input_acc.data()->{{field.name}}->get())); 19 size += GetSerializedSize_(*(input_acc.data()->{{field.name}}->get()));
20 {% else %} 20 {% else %}
21 size += GetSerializedSize_(*(input_acc.data()->{{field.name}})); 21 size += GetSerializedSize_(*(input_acc.data()->{{field.name}}));
22 {% endif %} 22 {% endif %}
23 break; 23 break;
24 {%- endif %} 24 {%- endif %}
25 {%- endfor %} 25 {%- endfor %}
26 default: 26 default:
27 break; 27 break;
28 } 28 }
29 return size; 29 return size;
30 } 30 }
31 31
32 {#
33 |input|: Could be mutated if it contains handles.
34 |buf|: Used to allocate memory, should we need it.
35 |output|: Serialize into *output; it is expected that *output points to a
36 memory we can serialize into without allocating from |buf|. However,
37 if this union contains another union, we will use |buf| to allocate
38 memory and serialize out-of-line.
39 #}
32 mojo::internal::ValidationError SerializeUnion_( 40 mojo::internal::ValidationError SerializeUnion_(
33 {{union.name}}* input, 41 {{union.name}}* input,
34 mojo::internal::Buffer* buf, 42 mojo::internal::Buffer* buf,
35 internal::{{union.name}}_Data** output, 43 internal::{{union.name}}_Data** output) {
36 bool inlined) {
37 internal::{{union.name}}_Data* result = *output; 44 internal::{{union.name}}_Data* result = *output;
38 if (input) { 45 if (input) {
39 if (!inlined) {
40 result = internal::{{union.name}}_Data::New(buf);
41 }
42 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input); 46 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input);
43 // TODO(azani): Handle unknown and objects. 47 // TODO(azani): Handle unknown and objects.
44 // Set the not-null flag. 48 // Set the not-null flag.
45 result->size = 16; 49 result->size = 16;
46 result->tag = input->which(); 50 result->tag = input->which();
47 switch (input->which()) { 51 switch (input->which()) {
48 {% for field in union.fields %} 52 {% for field in union.fields %}
49 case {{union.name}}::Tag::{{field.name|upper}}: { 53 case {{union.name}}::Tag::{{field.name|upper}}: {
50 {% if field.kind|is_object_kind %} 54 {% if field.kind|is_object_kind %}
51 {% if field.kind|is_string_kind %} 55 {% if field.kind|is_string_kind %}
52 SerializeString_( 56 SerializeString_(
53 *input_acc.data()->{{field.name}}, 57 *input_acc.data()->{{field.name}},
54 buf, &result->data.f_{{field.name}}.ptr); 58 buf, &result->data.f_{{field.name}}.ptr);
55 {% elif field.kind|is_struct_kind %} 59 {% elif field.kind|is_struct_kind %}
56 {{struct_macros.call_serialize_struct( 60 {{struct_macros.call_serialize_struct(
57 input = "input_acc.data()->%s->get()"|format(field.name), 61 input = "input_acc.data()->%s->get()"|format(field.name),
58 buffer = "buf", 62 buffer = "buf",
59 output = "&result->data.f_%s.ptr"|format(field.name), 63 output = "&result->data.f_%s.ptr"|format(field.name),
60 should_return_errors = true)|indent(6)}} 64 should_return_errors = true)|indent(6)}}
61 {% elif field.kind|is_union_kind %} 65 {% elif field.kind|is_union_kind %}
62 {{struct_macros.call_serialize_union( 66 // Point *output to newly allocated memory
63 input = "input_acc.data()->%s->get()"|format(field.name), 67 // SerializeUnion_ into newly allocated memory.
64 buffer = "buf", 68 if (!{{"input_acc.data()->%s->get()"|format(field.name)}}) {
65 output = "&result->data.f_%s.ptr"|format(field.name), 69 {{"result->data.f_%s.ptr"|format(field.name)}} = nullptr;
66 inlined = "false", 70 } else {
67 should_return_errors = true)|indent(6)}} 71 {{"result->data.f_%s.ptr"|format(field.name)}} =
72 {{field.kind|get_name_for_kind}}::Data_::New(buf);
73 {{struct_macros.call_serialize_union(
74 input = "input_acc.data()->%s->get()"|format(field.name),
75 buffer = "buf",
76 output = "&result->data.f_%s.ptr"|format(field.name),
77 should_return_errors = true)|indent(8)}}
78 }
68 {% elif field.kind|is_array_kind %} 79 {% elif field.kind|is_array_kind %}
69 {{struct_macros.call_serialize_array( 80 {{struct_macros.call_serialize_array(
70 name = field.name, 81 name = field.name,
71 kind = field.kind, 82 kind = field.kind,
72 input = "input_acc.data()->%s"|format(field.name), 83 input = "input_acc.data()->%s"|format(field.name),
73 buffer = "buf", 84 buffer = "buf",
74 output = "&result->data.f_%s.ptr"|format(field.name), 85 output = "&result->data.f_%s.ptr"|format(field.name),
75 should_return_errors = true, 86 should_return_errors = true,
76 indent_size = 16)|indent(6)}} 87 indent_size = 16)|indent(6)}}
77 {% elif field.kind|is_map_kind %} 88 {% elif field.kind|is_map_kind %}
(...skipping 22 matching lines...) Expand all
100 result->data.f_{{field.name}} = input_acc.data()->{{field.name}}; 111 result->data.f_{{field.name}} = input_acc.data()->{{field.name}};
101 {%- endif %} 112 {%- endif %}
102 break; 113 break;
103 } 114 }
104 {%- endfor %} 115 {%- endfor %}
105 default: 116 default:
106 // TODO(vardhan): Should this return an error code instead? 117 // TODO(vardhan): Should this return an error code instead?
107 MOJO_CHECK(false) << "No sane way to serialize a union with an unknown t ag."; 118 MOJO_CHECK(false) << "No sane way to serialize a union with an unknown t ag.";
108 break; 119 break;
109 } 120 }
110 } else if (inlined) { 121 } else {
111 result->set_null(); 122 result->set_null();
112 } else {
113 result = nullptr;
114 } 123 }
115 *output = result;
116 return mojo::internal::ValidationError::NONE; 124 return mojo::internal::ValidationError::NONE;
117 } 125 }
118 126
119 void Deserialize_(internal::{{union.name}}_Data* input, 127 void Deserialize_(internal::{{union.name}}_Data* input,
120 {{union.name}}* output) { 128 {{union.name}}* output) {
121 if (input && !input->is_null()) { 129 if (input && !input->is_null()) {
122 mojo::internal::UnionAccessor<{{union.name}}> result_acc(output); 130 mojo::internal::UnionAccessor<{{union.name}}> result_acc(output);
123 switch (input->tag) { 131 switch (input->tag) {
124 {#- TODO(vardhan): There is a lot of overlap with struct_macros.deserialize() 132 {#- TODO(vardhan): There is a lot of overlap with struct_macros.deserialize()
125 here, is it possible to merge? (currently looks very hairy) #} 133 here, is it possible to merge? (currently looks very hairy) #}
(...skipping 29 matching lines...) Expand all
155 break; 163 break;
156 } 164 }
157 {%- endfor %} 165 {%- endfor %}
158 default: 166 default:
159 MOJO_LOG(WARNING) << "Deserializing {{union.name}} with unknown tag!"; 167 MOJO_LOG(WARNING) << "Deserializing {{union.name}} with unknown tag!";
160 // No way to deserialize the data when we encounter an unknown tag. 168 // No way to deserialize the data when we encounter an unknown tag.
161 break; 169 break;
162 } 170 }
163 } 171 }
164 } 172 }
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/union_serialization_declaration.tmpl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698