| 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 |