OLD | NEW |
---|---|
1 {% from "constant_definition.tmpl" import constant_def %} | 1 {% from "constant_definition.tmpl" import constant_def %} |
2 {% from "enum_definition.tmpl" import enum_def %} | 2 {% from "enum_definition.tmpl" import enum_def %} |
3 | 3 |
4 {% macro encode(variable, kind, offset, bit, level=0) %} | |
5 {% if kind|is_pointer_array_kind %} | |
6 {% set sub_kind = kind.kind %} | |
7 if ({{variable}} == null) { | |
8 encoder{{level}}.encodeNullPointer({{offset}}); | |
9 } else { | |
10 org.chromium.mojo.bindings.Encoder encoder{{level + 1}} = encoder{{level}}.e ncodePointerArray({{variable}}.length, {{offset}}); | |
11 for (int i{{level}} = 0; i{{level}} < {{variable}}.length; ++i{{level}}) { | |
12 {{encode(variable~'[i'~level~']', sub_kind, '8 + 8 * i'~level, 0, level+ 1)|indent(8)}} | |
13 } | |
14 } | |
15 {% else %} | |
16 encoder{{level}}.{{kind|encode_method(variable, offset, bit)}}; | |
17 {% endif %} | |
18 {% endmacro %} | |
19 | |
20 {% macro decode(variable, kind, offset, bit, level=0) %} | |
21 {% if kind|is_struct_kind or kind|is_pointer_array_kind %} | |
22 org.chromium.mojo.bindings.Decoder decoder{{level+1}} = decoder{{level}}.readPoi nter({{offset}}); | |
23 if (decoder{{level+1}} == null) { | |
24 {{variable}} = null; | |
25 } else { | |
26 {% if kind|is_struct_kind %} | |
27 {{variable}} = {{kind|java_type}}.decode(decoder{{level+1}}); | |
28 {% else %} | |
rmcilroy
2014/06/25 13:14:39
comment that kind|is_pointer_array_kind.
qsr
2014/06/25 14:43:05
Done.
| |
29 DataHeader si{{level+1}} = decoder{{level+1}}.readDataHeader(); | |
30 {{variable}} = {{kind|new_array('si'~(level+1)~'.numFields')}}; | |
31 for (int i{{level+1}} = 0; i{{level+1}} < si{{level+1}}.numFields; ++i{{leve l+1}}) { | |
32 {{decode(variable~'[i'~(level+1)~']', kind.kind, '8 + 8 * i'~(level+1), 0, level+1)|indent(8)}} | |
33 } | |
34 {% endif %} | |
35 } | |
36 {% else %} | |
37 {{variable}} = decoder{{level}}.{{kind|decode_method(offset, bit)}}; | |
38 {% endif %} | |
39 {% endmacro %} | |
40 | |
4 {% macro struct_def(struct, inner_class=False) %} | 41 {% macro struct_def(struct, inner_class=False) %} |
5 {{'static' if inner_class else 'public'}} final class {{struct|name}} extends or g.chromium.mojo.bindings.Struct { | 42 {{'static' if inner_class else 'public'}} final class {{struct|name}} extends or g.chromium.mojo.bindings.Struct { |
43 | |
44 private static final int STRUCT_SIZE = {{struct.packed|struct_size}}; | |
45 private static final DataHeader DEFAULT_STRUCT_INFO = new DataHeader(STRUCT_ SIZE, {{struct.packed.packed_fields|length}}); | |
6 {% for constant in struct.constants %} | 46 {% for constant in struct.constants %} |
7 | 47 |
8 {{constant_def(constant)|indent(4)}} | 48 {{constant_def(constant)|indent(4)}} |
9 {% endfor %} | 49 {% endfor %} |
10 {% for enum in struct.enums %} | 50 {% for enum in struct.enums %} |
11 | 51 |
12 {{enum_def(enum, false)|indent(4)}} | 52 {{enum_def(enum, false)|indent(4)}} |
13 {% endfor %} | 53 {% endfor %} |
14 {% if struct.fields %} | 54 {% if struct.fields %} |
15 | 55 |
16 {% for field in struct.fields %} | 56 {% for field in struct.fields %} |
17 public {{field.kind|java_type}} {{field|name}}; | 57 public {{field.kind|java_type}} {{field|name}}; |
18 {% endfor %} | 58 {% endfor %} |
19 {% endif %} | 59 {% endif %} |
20 | 60 |
21 public {{struct|name}}() { | 61 public {{struct|name}}() { |
62 super(STRUCT_SIZE); | |
22 {% for field in struct.fields %} | 63 {% for field in struct.fields %} |
23 {% if field.default %} | 64 {% if field.default %} |
24 {{field|name}} = {{field|default_value}}; | 65 {{field|name}} = {{field|default_value}}; |
25 {% elif field.kind|is_handle %} | 66 {% elif field.kind|is_handle %} |
26 {{field|name}} = org.chromium.mojo.system.InvalidHandle.INSTANCE; | 67 {{field|name}} = org.chromium.mojo.system.InvalidHandle.INSTANCE; |
27 {% endif %} | 68 {% endif %} |
28 {% endfor %} | 69 {% endfor %} |
29 } | 70 } |
30 | 71 |
72 public static {{struct|name}} deserialize(org.chromium.mojo.bindings.Message message) { | |
73 return decode(new org.chromium.mojo.bindings.Decoder(message)); | |
74 } | |
75 | |
76 public static {{struct|name}} decode(org.chromium.mojo.bindings.Decoder deco der0) { | |
77 {{struct|name}} result = new {{struct|name}}(); | |
78 DataHeader mainDataHeader = decoder0.readDataHeader(); | |
79 {% for byte in struct.bytes %} | |
80 {% for packed_field in byte.packed_fields %} | |
81 if ({{packed_field.ordinal}} < mainDataHeader.numFields) { | |
82 {{decode('result.' ~ packed_field.field|name, packed_field.field.kin d, 8+packed_field.offset, packed_field.bit)|indent(12)}} | |
83 } | |
84 {% endfor %} | |
85 {% endfor %} | |
86 return result; | |
87 } | |
88 | |
89 @Override | |
90 protected final void encode(org.chromium.mojo.bindings.Encoder encoder) { | |
91 org.chromium.mojo.bindings.Encoder encoder0 = encoder.getEncoderAtDataOf fset(DEFAULT_STRUCT_INFO); | |
92 {% for byte in struct.bytes %} | |
93 {% for packed_field in byte.packed_fields %} | |
94 {{encode(packed_field.field|name, packed_field.field.kind, 8+packed_fiel d.offset, packed_field.bit)|indent(8)}} | |
95 {% endfor %} | |
96 {% endfor %} | |
97 } | |
31 } | 98 } |
32 {% endmacro %} | 99 {% endmacro %} |
OLD | NEW |