Upstream version 8.37.180.0
[platform/framework/web/crosswalk.git] / src / mojo / public / tools / bindings / generators / js_templates / struct_definition.tmpl
1 {#--- Begin #}
2   function {{struct.name}}() {
3     this.initDefaults_();
4   }
5
6 {#--- Enums #}
7 {%- from "enum_definition.tmpl" import enum_def %}
8 {%  for enum in struct.enums %}
9   {{enum_def("%s.%s"|format(struct.name, enum.name), enum, module)}}
10 {%  endfor %}
11
12 {#--- Constants #}
13 {%  for constant in struct.constants %}
14   {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}};
15 {%  endfor %}
16
17 {#--- Set up defaults #}
18   {{struct.name}}.prototype.initDefaults_ = function() {
19 {%- for packed_field in struct.packed.packed_fields %}
20     this.{{packed_field.field.name}} = {{packed_field.field|default_value}};
21 {%- endfor %}
22   };
23
24 {#--- Encoding and decoding #}
25
26   {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payload_size}};
27
28   {{struct.name}}.decode = function(decoder) {
29     var packed;
30     var val = new {{struct.name}}();
31     var numberOfBytes = decoder.readUint32();
32     var numberOfFields = decoder.readUint32();
33 {%- for byte in struct.bytes %}
34 {%-   if byte.packed_fields|length > 1 %}
35     packed = decoder.readUint8();
36 {%-     for packed_field in byte.packed_fields %}
37     val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? true : false;
38 {%-     endfor %}
39 {%-   else %}
40 {%-     for packed_field in byte.packed_fields %}
41     val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_snippet}};
42 {%-     endfor %}
43 {%-   endif %}
44 {%-   if byte.is_padding %}
45     decoder.skip(1);
46 {%-   endif %}
47 {%- endfor %}
48     return val;
49   };
50
51   {{struct.name}}.encode = function(encoder, val) {
52     var packed;
53     encoder.writeUint32({{struct.name}}.encodedSize);
54     encoder.writeUint32({{struct.packed.packed_fields|length}});
55
56 {%- for byte in struct.bytes %}
57 {%-   if byte.packed_fields|length > 1 %}
58     packed = 0;
59 {%-     for packed_field in byte.packed_fields %}
60     packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
61 {%-     endfor %}
62     encoder.writeUint8(packed);
63 {%-   else %}
64 {%-     for packed_field in byte.packed_fields %}
65     encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.name}});
66 {%-     endfor %}
67 {%-   endif %}
68 {%-   if byte.is_padding %}
69     encoder.skip(1);
70 {%-   endif %}
71 {%- endfor %}
72   };