| OLD | NEW |
| 1 {#--- Begin #} | 1 {#--- Begin #} |
| 2 function {{struct.name}}(values) { | 2 function {{struct.name}}(values) { |
| 3 this.initDefaults_(); | 3 this.initDefaults_(); |
| 4 this.initFields_(values); | 4 this.initFields_(values); |
| 5 } | 5 } |
| 6 | 6 |
| 7 {#--- Enums #} | 7 {#--- Enums #} |
| 8 {%- from "enum_definition.tmpl" import enum_def %} | 8 {%- from "enum_definition.tmpl" import enum_def %} |
| 9 {% for enum in struct.enums %} | 9 {% for enum in struct.enums %} |
| 10 {{enum_def("%s.%s"|format(struct.name, enum.name), enum)}} | 10 {{enum_def("%s.%s"|format(struct.name, enum.name), enum)}} |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 {#- Before validating fields introduced at a certain version, we need to add | 51 {#- Before validating fields introduced at a certain version, we need to add |
| 52 a version check, which makes sure we skip further validation if |object| | 52 a version check, which makes sure we skip further validation if |object| |
| 53 is from an earlier version. |last_checked_version| records the last | 53 is from an earlier version. |last_checked_version| records the last |
| 54 version that we have added such version check. #} | 54 version that we have added such version check. #} |
| 55 {%- from "validation_macros.tmpl" import validate_struct_field %} | 55 {%- from "validation_macros.tmpl" import validate_struct_field %} |
| 56 {%- set last_checked_version = 0 %} | 56 {%- set last_checked_version = 0 %} |
| 57 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %} | 57 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %} |
| 58 {%- set offset = packed_field|field_offset %} | 58 {%- set offset = packed_field|field_offset %} |
| 59 {%- set field = packed_field.field %} | 59 {%- set field = packed_field.field %} |
| 60 {%- set name = struct.name ~ '.' ~ field.name %} | 60 {%- set name = struct.name ~ '.' ~ field.name %} |
| 61 {% if field|is_object_field or field|is_any_handle_or_interface_field or | 61 {% if field.kind|is_object_kind or |
| 62 field|is_enum_field %} | 62 field.kind|is_any_handle_or_interface_kind or |
| 63 field.kind|is_enum_kind %} |
| 63 {% if packed_field.min_version > last_checked_version %} | 64 {% if packed_field.min_version > last_checked_version %} |
| 64 {% set last_checked_version = packed_field.min_version %} | 65 {% set last_checked_version = packed_field.min_version %} |
| 65 // version check {{name}} | 66 // version check {{name}} |
| 66 if (!messageValidator.isFieldInStructVersion(offset, {{packed_field.min_vers
ion}})) | 67 if (!messageValidator.isFieldInStructVersion(offset, {{packed_field.min_vers
ion}})) |
| 67 return validator.validationError.NONE; | 68 return validator.validationError.NONE; |
| 68 {%- endif -%} | 69 {%- endif -%} |
| 69 {{validate_struct_field(field, offset, name)|indent(4)}} | 70 {{validate_struct_field(field, offset, name)|indent(4)}} |
| 70 {%- endif %} | 71 {%- endif %} |
| 71 {%- endfor %} | 72 {%- endfor %} |
| 72 | 73 |
| 73 return validator.validationError.NONE; | 74 return validator.validationError.NONE; |
| 74 }; | 75 }; |
| 75 | 76 |
| 76 {#--- Encoding and decoding #} | 77 {#--- Encoding and decoding #} |
| 77 | 78 |
| 78 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa
d_size}}; | 79 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa
d_size}}; |
| 79 | 80 |
| 80 {{struct.name}}.decode = function(decoder) { | 81 {{struct.name}}.decode = function(decoder) { |
| 81 var packed; | 82 var packed; |
| 82 var val = new {{struct.name}}(); | 83 var val = new {{struct.name}}(); |
| 83 var numberOfBytes = decoder.readUint32(); | 84 var numberOfBytes = decoder.readUint32(); |
| 84 var version = decoder.readUint32(); | 85 var version = decoder.readUint32(); |
| 85 {%- for byte in struct.bytes %} | 86 {%- for byte in struct.bytes %} |
| 86 {%- if byte.packed_fields|length >= 1 and | 87 {%- if byte.packed_fields|length >= 1 and |
| 87 byte.packed_fields[0].field|is_bool_field %} | 88 byte.packed_fields[0].field.kind|is_bool_kind %} |
| 88 packed = decoder.readUint8(); | 89 packed = decoder.readUint8(); |
| 89 {%- for packed_field in byte.packed_fields %} | 90 {%- for packed_field in byte.packed_fields %} |
| 90 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru
e : false; | 91 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru
e : false; |
| 91 {%- endfor %} | 92 {%- endfor %} |
| 92 {%- else %} | 93 {%- else %} |
| 93 {%- for packed_field in byte.packed_fields %} | 94 {%- for packed_field in byte.packed_fields %} |
| 94 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s
nippet}}; | 95 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s
nippet}}; |
| 95 {%- endfor %} | 96 {%- endfor %} |
| 96 {%- endif %} | 97 {%- endif %} |
| 97 {%- if byte.is_padding %} | 98 {%- if byte.is_padding %} |
| 98 decoder.skip(1); | 99 decoder.skip(1); |
| 99 {%- endif %} | 100 {%- endif %} |
| 100 {%- endfor %} | 101 {%- endfor %} |
| 101 return val; | 102 return val; |
| 102 }; | 103 }; |
| 103 | 104 |
| 104 {{struct.name}}.encode = function(encoder, val) { | 105 {{struct.name}}.encode = function(encoder, val) { |
| 105 var packed; | 106 var packed; |
| 106 encoder.writeUint32({{struct.name}}.encodedSize); | 107 encoder.writeUint32({{struct.name}}.encodedSize); |
| 107 encoder.writeUint32({{struct.versions[-1].version}}); | 108 encoder.writeUint32({{struct.versions[-1].version}}); |
| 108 | 109 |
| 109 {%- for byte in struct.bytes %} | 110 {%- for byte in struct.bytes %} |
| 110 {%- if byte.packed_fields|length >= 1 and | 111 {%- if byte.packed_fields|length >= 1 and |
| 111 byte.packed_fields[0].field|is_bool_field %} | 112 byte.packed_fields[0].field.kind|is_bool_kind %} |
| 112 packed = 0; | 113 packed = 0; |
| 113 {%- for packed_field in byte.packed_fields %} | 114 {%- for packed_field in byte.packed_fields %} |
| 114 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}} | 115 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}} |
| 115 {%- endfor %} | 116 {%- endfor %} |
| 116 encoder.writeUint8(packed); | 117 encoder.writeUint8(packed); |
| 117 {%- else %} | 118 {%- else %} |
| 118 {%- for packed_field in byte.packed_fields %} | 119 {%- for packed_field in byte.packed_fields %} |
| 119 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n
ame}}); | 120 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n
ame}}); |
| 120 {%- endfor %} | 121 {%- endfor %} |
| 121 {%- endif %} | 122 {%- endif %} |
| 122 {%- if byte.is_padding %} | 123 {%- if byte.is_padding %} |
| 123 encoder.skip(1); | 124 encoder.skip(1); |
| 124 {%- endif %} | 125 {%- endif %} |
| 125 {%- endfor %} | 126 {%- endfor %} |
| 126 }; | 127 }; |
| OLD | NEW |