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 |