2 function {{struct.name}}() {
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)}}
13 {% for constant in struct.constants %}
14 {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}};
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}};
24 {#--- Encoding and decoding #}
26 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payload_size}};
28 {{struct.name}}.decode = function(decoder) {
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;
40 {%- for packed_field in byte.packed_fields %}
41 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_snippet}};
44 {%- if byte.is_padding %}
51 {{struct.name}}.encode = function(encoder, val) {
53 encoder.writeUint32({{struct.name}}.encodedSize);
54 encoder.writeUint32({{struct.packed.packed_fields|length}});
56 {%- for byte in struct.bytes %}
57 {%- if byte.packed_fields|length > 1 %}
59 {%- for packed_field in byte.packed_fields %}
60 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
62 encoder.writeUint8(packed);
64 {%- for packed_field in byte.packed_fields %}
65 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.name}});
68 {%- if byte.is_padding %}