OLD | NEW |
| (Empty) |
1 {#--- Begin #} | |
2 function {{struct.name}}(values) { | |
3 this.initDefaults_(); | |
4 this.initFields_(values); | |
5 } | |
6 | |
7 {#--- Enums #} | |
8 {%- from "enum_definition.tmpl" import enum_def %} | |
9 {% for enum in struct.enums %} | |
10 {{enum_def("%s.%s"|format(struct.name, enum.name), enum)}} | |
11 {%- endfor %} | |
12 | |
13 {#--- Constants #} | |
14 {% for constant in struct.constants %} | |
15 {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}}; | |
16 {%- endfor %} | |
17 | |
18 {#--- initDefaults() #} | |
19 {{struct.name}}.prototype.initDefaults_ = function() { | |
20 {%- for packed_field in struct.packed.packed_fields %} | |
21 this.{{packed_field.field.name}} = {{packed_field.field|default_value}}; | |
22 {%- endfor %} | |
23 }; | |
24 | |
25 {#--- initFields() #} | |
26 {{struct.name}}.prototype.initFields_ = function(fields) { | |
27 for(var field in fields) { | |
28 if (this.hasOwnProperty(field)) | |
29 this[field] = fields[field]; | |
30 } | |
31 }; | |
32 | |
33 {#--- Validation #} | |
34 | |
35 {{struct.name}}.validate = function(messageValidator, offset) { | |
36 var err; | |
37 err = messageValidator.validateStructHeader(offset, {{struct.name}}.encodedS
ize, {{struct.versions[-1].version}}); | |
38 if (err !== validator.validationError.NONE) | |
39 return err; | |
40 | |
41 {%- from "validation_macros.tmpl" import validate_struct_field %} | |
42 {%- for packed_field in struct.packed.packed_fields %} | |
43 {%- set offset = packed_field|field_offset %} | |
44 {%- set field = packed_field.field %} | |
45 {%- set name = struct.name ~ '.' ~ field.name %} | |
46 {{validate_struct_field(field, offset, name)|indent(4)}} | |
47 {%- endfor %} | |
48 | |
49 return validator.validationError.NONE; | |
50 }; | |
51 | |
52 {#--- Encoding and decoding #} | |
53 | |
54 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa
d_size}}; | |
55 | |
56 {{struct.name}}.decode = function(decoder) { | |
57 var packed; | |
58 var val = new {{struct.name}}(); | |
59 var numberOfBytes = decoder.readUint32(); | |
60 var version = decoder.readUint32(); | |
61 {%- for byte in struct.bytes %} | |
62 {%- if byte.packed_fields|length > 1 %} | |
63 packed = decoder.readUint8(); | |
64 {%- for packed_field in byte.packed_fields %} | |
65 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru
e : false; | |
66 {%- endfor %} | |
67 {%- else %} | |
68 {%- for packed_field in byte.packed_fields %} | |
69 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s
nippet}}; | |
70 {%- endfor %} | |
71 {%- endif %} | |
72 {%- if byte.is_padding %} | |
73 decoder.skip(1); | |
74 {%- endif %} | |
75 {%- endfor %} | |
76 return val; | |
77 }; | |
78 | |
79 {{struct.name}}.encode = function(encoder, val) { | |
80 var packed; | |
81 encoder.writeUint32({{struct.name}}.encodedSize); | |
82 encoder.writeUint32({{struct.versions[-1].version}}); | |
83 | |
84 {%- for byte in struct.bytes %} | |
85 {%- if byte.packed_fields|length > 1 %} | |
86 packed = 0; | |
87 {%- for packed_field in byte.packed_fields %} | |
88 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}} | |
89 {%- endfor %} | |
90 encoder.writeUint8(packed); | |
91 {%- else %} | |
92 {%- for packed_field in byte.packed_fields %} | |
93 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n
ame}}); | |
94 {%- endfor %} | |
95 {%- endif %} | |
96 {%- if byte.is_padding %} | |
97 encoder.skip(1); | |
98 {%- endif %} | |
99 {%- endfor %} | |
100 }; | |
OLD | NEW |