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

Side by Side Diff: mojo/public/tools/bindings/generators/dart_templates/encoding_macros.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 {%- macro encode(variable, kind, offset, bit, level=0, check_for_null=True) %}
2 {%- if kind|is_pointer_array_kind or kind|is_enum_array_kind %}
3 {%- set sub_kind = kind.kind %}
4 {%- set sub_kind_size = "bindings.kPointerSize" %}
5 {%- if sub_kind|is_union_kind %}
6 {%- set sub_kind_size = "bindings.kUnionSize" %}
7 {%- elif sub_kind|is_enum_kind %}
8 {%- set sub_kind_size = "bindings.kEnumSize" %}
9 {%- endif %}
10 {%- if check_for_null -%}
11 if ({{variable}} == null) {
12 encoder{{level}}.encodeNullPointer({{offset}}, {{kind|is_nullable_kind|dart_tr ue_false}});
13 } else {
14 {%- else %}
15 {
16 {%- endif %}
17 {%- if sub_kind|is_union_kind %}
18 var encoder{{level + 1}} = encoder{{level}}.encodeUnionArray({{variable}}.leng th, {{offset}}, {{kind|array_expected_length}});
19 {%- elif sub_kind|is_enum_kind %}
20 var encoder{{level + 1}} = encoder{{level}}.encodeEnumArray({{variable}}.lengt h, {{offset}}, {{kind|array_expected_length}});
21 {%- else %}
22 var encoder{{level + 1}} = encoder{{level}}.encodePointerArray({{variable}}.le ngth, {{offset}}, {{kind|array_expected_length}});
23 {%- endif %}
24 for (int i{{level}} = 0; i{{level}} < {{variable}}.length; ++i{{level}}) {
25 {{encode(variable~'[i'~level~']', sub_kind, 'bindings.ArrayDataHeader.kHeade rSize + ' ~ sub_kind_size ~ ' * i'~level, 0, level+1)|indent(4)}}
26 }
27 }
28 {%- elif kind|is_map_kind -%}
29 if ({{variable}} == null) {
30 encoder{{level}}.encodeNullPointer({{offset}}, {{kind|is_nullable_kind|dart_tr ue_false}});
31 } else {
32 var encoder{{level + 1}} = encoder{{level}}.encoderForMap({{offset}});
33 var keys{{level}} = {{variable}}.keys.toList();
34 var values{{level}} = {{variable}}.values.toList();
35 {{encode('keys'~level, kind.key_kind|array, 'bindings.ArrayDataHeader.kHeaderS ize', 0, level+1, False)|indent(2)}}
36 {{encode('values'~level, kind.value_kind|array, 'bindings.ArrayDataHeader.kHea derSize + bindings.kPointerSize', 0, level+1, False)|indent(2)}}
37 }
38 {%- else -%}
39 encoder{{level}}.{{kind|encode_method(variable, offset, bit)}};
40 {%- endif %}
41 {%- endmacro %}
42
43 {%- macro decode(variable, kind, offset, bit, level=0) %}
44 {%- if kind|is_struct_kind or
45 kind|is_pointer_array_kind or
46 kind|is_enum_array_kind or
47 kind|is_map_kind %}
48 var decoder{{level+1}} = decoder{{level}}.decodePointer({{offset}}, {{kind|is_nu llable_kind|dart_true_false}});
49 {%- if kind|is_struct_kind %}
50 {{variable}} = {{kind|dart_type}}.decode(decoder{{level+1}});
51 {%- else %}{# kind|is_pointer_array_kind or is_map_kind #}
52 {%- if kind|is_nullable_kind %}
53 if (decoder{{level+1}} == null) {
54 {{variable}} = null;
55 } else {
56 {%- else %}
57 {
58 {%- endif %}
59 {%- if kind|is_map_kind %}
60 decoder{{level+1}}.decodeDataHeaderForMap();
61 List<{{kind.key_kind|dart_type}}> keys{{level}};
62 List<{{kind.value_kind|dart_type}}> values{{level}};
63 {
64 {{decode('keys'~level, kind.key_kind|array, 'bindings.ArrayDataHeader.kHeade rSize', 0, level+1)|indent(4)}}
65 }
66 {
67 {{decode('values'~level, kind.value_kind|array('keys'~level~'.length'), 'bin dings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize', 0, level+1)|indent(4 )}}
68 }
69 {{variable}} = new Map<{{kind.key_kind|dart_type}}, {{kind.value_kind|dart_typ e}}>.fromIterables(
70 keys{{level}}, values{{level}});
71 {%- else %}
72 {%- set sub_kind = kind.kind %}
73 {%- if sub_kind|is_union_kind %}
74 {%- set sub_kind_size = "bindings.kUnionSize" %}
75 var si{{level+1}} = decoder{{level+1}}.decodeDataHeaderForUnionArray({{kind|ar ray_expected_length}});
76 {%- elif sub_kind|is_enum_kind %}
77 {%- set sub_kind_size = "bindings.kEnumSize" %}
78 var si{{level+1}} = decoder{{level+1}}.decodeDataHeaderForEnumArray({{kind|arr ay_expected_length}});
79 {%- else %}
80 {%- set sub_kind_size = "bindings.kPointerSize" %}
81 var si{{level+1}} = decoder{{level+1}}.decodeDataHeaderForPointerArray({{kind| array_expected_length}});
82 {%- endif %}
83 {{variable}} = new {{kind|dart_type}}(si{{level+1}}.numElements);
84 for (int i{{level+1}} = 0; i{{level+1}} < si{{level+1}}.numElements; ++i{{leve l+1}}) {
85 {{decode(variable~'[i'~(level+1)~']', kind.kind, 'bindings.ArrayDataHeader.k HeaderSize + ' ~ sub_kind_size ~ ' * i'~(level+1), 0, level+1)|indent(4)}}
86 }
87 {%- endif %}
88 }
89 {%- endif %}
90 {%- elif kind|is_union_kind or kind|is_enum_kind %}
91 {{variable}} = {{kind|dart_type}}.decode(decoder{{level}}, {{offset}});
92 {%- if not kind|is_nullable_kind %}
93 if ({{variable}} == null) {
94 throw new bindings.MojoCodecError(
95 'Trying to decode null union for non-nullable {{kind|dart_type}}.');
96 }
97 {% endif %}
98 {%- else %}
99 {{variable}} = decoder{{level}}.{{kind|decode_method(offset, bit)}};
100 {%- endif %}
101 {%- endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698