OLD | NEW |
| (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 %} | |
OLD | NEW |