OLD | NEW |
1 {%- set mojom_type = union|get_qualified_name_for_kind %} | 1 {%- set mojom_type = union|get_qualified_name_for_kind %} |
2 {%- set data_type = union|get_qualified_name_for_kind(internal=True) %} | 2 {%- set data_type = union|get_qualified_name_for_kind(internal=True) %} |
3 | 3 |
4 template <> | 4 template <> |
5 struct {{export_attribute}} UnionTraits<{{mojom_type}}, {{mojom_type}}Ptr> { | 5 struct {{export_attribute}} UnionTraits<{{mojom_type}}::DataView, |
| 6 {{mojom_type}}Ptr> { |
6 static bool IsNull(const {{mojom_type}}Ptr& input) { return !input; } | 7 static bool IsNull(const {{mojom_type}}Ptr& input) { return !input; } |
7 static void SetToNull({{mojom_type}}Ptr* output) { output->reset(); } | 8 static void SetToNull({{mojom_type}}Ptr* output) { output->reset(); } |
8 | 9 |
9 static {{mojom_type}}::Tag GetTag(const {{mojom_type}}Ptr& input) { | 10 static {{mojom_type}}::Tag GetTag(const {{mojom_type}}Ptr& input) { |
10 return input->which(); | 11 return input->which(); |
11 } | 12 } |
12 | 13 |
13 {%- for field in union.fields %} | 14 {%- for field in union.fields %} |
14 {%- set return_ref = field.kind|is_object_kind or | 15 {%- set return_ref = field.kind|is_object_kind or |
15 field.kind|is_any_handle_or_interface_kind %} | 16 field.kind|is_any_handle_or_interface_kind %} |
16 {%- if return_ref %} | 17 {%- if return_ref %} |
17 static decltype(std::declval<{{mojom_type}}>().get_{{field.name}}()) | 18 static decltype(std::declval<{{mojom_type}}>().get_{{field.name}}()) |
18 {{field.name}}({{mojom_type}}Ptr& input) { | 19 {{field.name}}({{mojom_type}}Ptr& input) { |
19 return input->get_{{field.name}}(); | 20 return input->get_{{field.name}}(); |
20 } | 21 } |
21 {%- else %} | 22 {%- else %} |
22 static decltype(std::declval<{{mojom_type}}>().get_{{field.name}}()) | 23 static decltype(std::declval<{{mojom_type}}>().get_{{field.name}}()) |
23 {{field.name}}(const {{mojom_type}}Ptr& input) { | 24 {{field.name}}(const {{mojom_type}}Ptr& input) { |
24 return input->get_{{field.name}}(); | 25 return input->get_{{field.name}}(); |
25 } | 26 } |
26 {%- endif %} | 27 {%- endif %} |
27 {%- endfor %} | 28 {%- endfor %} |
28 | 29 |
29 static bool Read({{mojom_type}}DataView input, {{mojom_type}}Ptr* output); | 30 static bool Read({{mojom_type}}::DataView input, {{mojom_type}}Ptr* output); |
30 }; | 31 }; |
31 | 32 |
32 namespace internal { | 33 namespace internal { |
33 | 34 |
34 template <typename MaybeConstUserType> | 35 template <typename MaybeConstUserType> |
35 struct Serializer<{{mojom_type}}Ptr, MaybeConstUserType> { | 36 struct Serializer<{{mojom_type}}Ptr, MaybeConstUserType> { |
36 using UserType = typename std::remove_const<MaybeConstUserType>::type; | 37 using UserType = typename std::remove_const<MaybeConstUserType>::type; |
37 using Traits = UnionTraits<{{mojom_type}}, UserType>; | 38 using Traits = UnionTraits<{{mojom_type}}::DataView, UserType>; |
38 | 39 |
39 static size_t PrepareToSerialize(MaybeConstUserType& input, | 40 static size_t PrepareToSerialize(MaybeConstUserType& input, |
40 bool inlined, | 41 bool inlined, |
41 SerializationContext* context) { | 42 SerializationContext* context) { |
42 size_t size = inlined ? 0 : sizeof({{data_type}}); | 43 size_t size = inlined ? 0 : sizeof({{data_type}}); |
43 | 44 |
44 if (CallIsNullIfExists<Traits>(input)) | 45 if (CallIsNullIfExists<Traits>(input)) |
45 return size; | 46 return size; |
46 | 47 |
47 void* custom_context = CustomContextHelper<Traits>::SetUp(input, context); | 48 void* custom_context = CustomContextHelper<Traits>::SetUp(input, context); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 | 155 |
155 CustomContextHelper<Traits>::TearDown(input, custom_context); | 156 CustomContextHelper<Traits>::TearDown(input, custom_context); |
156 } | 157 } |
157 | 158 |
158 static bool Deserialize({{data_type}}* input, | 159 static bool Deserialize({{data_type}}* input, |
159 UserType* output, | 160 UserType* output, |
160 SerializationContext* context) { | 161 SerializationContext* context) { |
161 if (!input || input->is_null()) | 162 if (!input || input->is_null()) |
162 return CallSetToNullIfExists<Traits>(output); | 163 return CallSetToNullIfExists<Traits>(output); |
163 | 164 |
164 {{mojom_type}}DataView data_view(input, context); | 165 {{mojom_type}}::DataView data_view(input, context); |
165 return Traits::Read(data_view, output); | 166 return Traits::Read(data_view, output); |
166 } | 167 } |
167 }; | 168 }; |
168 | 169 |
169 } // namespace internal | 170 } // namespace internal |
OLD | NEW |