OLD | NEW |
1 {#--- Begin #} | 1 {#--- Begin #} |
2 function {{struct.name}}(values) { | 2 function {{struct.stylized_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.stylized_name, enum.stylized_name), enum)}} |
11 {%- endfor %} | 11 {%- endfor %} |
12 | 12 |
13 {#--- Constants #} | 13 {#--- Constants #} |
14 {% for constant in struct.constants %} | 14 {% for constant in struct.constants %} |
15 {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}}; | 15 {{struct.stylized_name}}.{{constant.stylized_name}} = |
| 16 {{constant.value|expression_to_text}}; |
16 {%- endfor %} | 17 {%- endfor %} |
17 | 18 |
18 {#--- initDefaults() #} | 19 {#--- initDefaults() #} |
19 {{struct.name}}.prototype.initDefaults_ = function() { | 20 {{struct.stylized_name}}.prototype.initDefaults_ = function() { |
20 {%- for packed_field in struct.packed.packed_fields %} | 21 {%- for packed_field in struct.packed.packed_fields %} |
21 this.{{packed_field.field.name}} = {{packed_field.field|default_value}}; | 22 this.{{packed_field.field.stylized_name}} = |
| 23 {{packed_field.field|default_value}}; |
22 {%- endfor %} | 24 {%- endfor %} |
23 }; | 25 }; |
24 | 26 |
25 {#--- initFields() #} | 27 {#--- initFields() #} |
26 {{struct.name}}.prototype.initFields_ = function(fields) { | 28 {{struct.stylized_name}}.prototype.initFields_ = function(fields) { |
27 for(var field in fields) { | 29 for(var field in fields) { |
28 if (this.hasOwnProperty(field)) | 30 if (this.hasOwnProperty(field)) |
29 this[field] = fields[field]; | 31 this[field] = fields[field]; |
30 } | 32 } |
31 }; | 33 }; |
32 | 34 |
33 {#--- Validation #} | 35 {#--- Validation #} |
34 | 36 |
35 {{struct.name}}.validate = function(messageValidator, offset) { | 37 {{struct.stylized_name}}.validate = function(messageValidator, offset) { |
36 var err; | 38 var err; |
37 err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize)
; | 39 err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize)
; |
38 if (err !== validator.validationError.NONE) | 40 if (err !== validator.validationError.NONE) |
39 return err; | 41 return err; |
40 | 42 |
41 var kVersionSizes = [ | 43 var kVersionSizes = [ |
42 {%- for version in struct.versions %} | 44 {%- for version in struct.versions %} |
43 {version: {{version.version}}, numBytes: {{version.num_bytes}}}{% if not l
oop.last %}, | 45 {version: {{version.version}}, numBytes: {{version.num_bytes}}}{% if not l
oop.last %}, |
44 {%- endif -%} | 46 {%- endif -%} |
45 {% endfor %} | 47 {% endfor %} |
46 ]; | 48 ]; |
47 err = messageValidator.validateStructVersion(offset, kVersionSizes); | 49 err = messageValidator.validateStructVersion(offset, kVersionSizes); |
48 if (err !== validator.validationError.NONE) | 50 if (err !== validator.validationError.NONE) |
49 return err; | 51 return err; |
50 | 52 |
51 {#- Before validating fields introduced at a certain version, we need to add | 53 {#- 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| | 54 a version check, which makes sure we skip further validation if |object| |
53 is from an earlier version. |last_checked_version| records the last | 55 is from an earlier version. |last_checked_version| records the last |
54 version that we have added such version check. #} | 56 version that we have added such version check. #} |
55 {%- from "validation_macros.tmpl" import validate_struct_field %} | 57 {%- from "validation_macros.tmpl" import validate_struct_field %} |
56 {%- set last_checked_version = 0 %} | 58 {%- set last_checked_version = 0 %} |
57 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %} | 59 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %} |
58 {%- set offset = packed_field|field_offset %} | 60 {%- set offset = packed_field|field_offset %} |
59 {%- set field = packed_field.field %} | 61 {%- set field = packed_field.field %} |
60 {%- set name = struct.name ~ '.' ~ field.name %} | 62 {%- set name = struct.stylized_name ~ '.' ~ field.stylized_name %} |
61 {% if field|is_object_field or field|is_any_handle_or_interface_field or | 63 {% if field|is_object_field or field|is_any_handle_or_interface_field or |
62 field|is_enum_field %} | 64 field|is_enum_field %} |
63 {% if packed_field.min_version > last_checked_version %} | 65 {% if packed_field.min_version > last_checked_version %} |
64 {% set last_checked_version = packed_field.min_version %} | 66 {% set last_checked_version = packed_field.min_version %} |
65 // version check {{name}} | 67 // version check {{name}} |
66 if (!messageValidator.isFieldInStructVersion(offset, {{packed_field.min_vers
ion}})) | 68 if (!messageValidator.isFieldInStructVersion(offset, {{packed_field.min_vers
ion}})) |
67 return validator.validationError.NONE; | 69 return validator.validationError.NONE; |
68 {%- endif -%} | 70 {%- endif -%} |
69 {{validate_struct_field(field, offset, name)|indent(4)}} | 71 {{validate_struct_field(field, offset, name)|indent(4)}} |
70 {%- endif %} | 72 {%- endif %} |
71 {%- endfor %} | 73 {%- endfor %} |
72 | 74 |
73 return validator.validationError.NONE; | 75 return validator.validationError.NONE; |
74 }; | 76 }; |
75 | 77 |
76 {#--- Encoding and decoding #} | 78 {#--- Encoding and decoding #} |
77 | 79 |
78 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa
d_size}}; | 80 {{struct.stylized_name}}.encodedSize = codec.kStructHeaderSize + |
| 81 {{struct.packed|payload_size}}; |
79 | 82 |
80 {{struct.name}}.decode = function(decoder) { | 83 {{struct.stylized_name}}.decode = function(decoder) { |
81 var packed; | 84 var packed; |
82 var val = new {{struct.name}}(); | 85 var val = new {{struct.stylized_name}}(); |
83 var numberOfBytes = decoder.readUint32(); | 86 var numberOfBytes = decoder.readUint32(); |
84 var version = decoder.readUint32(); | 87 var version = decoder.readUint32(); |
85 {%- for byte in struct.bytes %} | 88 {%- for byte in struct.bytes %} |
86 {%- if byte.packed_fields|length >= 1 and | 89 {%- if byte.packed_fields|length >= 1 and |
87 byte.packed_fields[0].field|is_bool_field %} | 90 byte.packed_fields[0].field|is_bool_field %} |
88 packed = decoder.readUint8(); | 91 packed = decoder.readUint8(); |
89 {%- for packed_field in byte.packed_fields %} | 92 {%- for packed_field in byte.packed_fields %} |
90 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru
e : false; | 93 val.{{packed_field.field.stylized_name}} = |
| 94 (packed >> {{packed_field.bit}}) & 1 ? true : false; |
91 {%- endfor %} | 95 {%- endfor %} |
92 {%- else %} | 96 {%- else %} |
93 {%- for packed_field in byte.packed_fields %} | 97 {%- for packed_field in byte.packed_fields %} |
94 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s
nippet}}; | 98 val.{{packed_field.field.stylized_name}} = |
| 99 decoder.{{packed_field.field.kind|decode_snippet}}; |
95 {%- endfor %} | 100 {%- endfor %} |
96 {%- endif %} | 101 {%- endif %} |
97 {%- if byte.is_padding %} | 102 {%- if byte.is_padding %} |
98 decoder.skip(1); | 103 decoder.skip(1); |
99 {%- endif %} | 104 {%- endif %} |
100 {%- endfor %} | 105 {%- endfor %} |
101 return val; | 106 return val; |
102 }; | 107 }; |
103 | 108 |
104 {{struct.name}}.encode = function(encoder, val) { | 109 {{struct.stylized_name}}.encode = function(encoder, val) { |
105 var packed; | 110 var packed; |
106 encoder.writeUint32({{struct.name}}.encodedSize); | 111 encoder.writeUint32({{struct.stylized_name}}.encodedSize); |
107 encoder.writeUint32({{struct.versions[-1].version}}); | 112 encoder.writeUint32({{struct.versions[-1].version}}); |
108 | 113 |
109 {%- for byte in struct.bytes %} | 114 {%- for byte in struct.bytes %} |
110 {%- if byte.packed_fields|length >= 1 and | 115 {%- if byte.packed_fields|length >= 1 and |
111 byte.packed_fields[0].field|is_bool_field %} | 116 byte.packed_fields[0].field|is_bool_field %} |
112 packed = 0; | 117 packed = 0; |
113 {%- for packed_field in byte.packed_fields %} | 118 {%- for packed_field in byte.packed_fields %} |
114 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}} | 119 packed |= |
| 120 val.{{packed_field.field.stylized_name}} & 1) << {{packed_field.bit}} |
115 {%- endfor %} | 121 {%- endfor %} |
116 encoder.writeUint8(packed); | 122 encoder.writeUint8(packed); |
117 {%- else %} | 123 {%- else %} |
118 {%- for packed_field in byte.packed_fields %} | 124 {%- for packed_field in byte.packed_fields %} |
119 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n
ame}}); | 125 encoder.{{packed_field.field.kind|encode_snippet}}val. |
| 126 {{packed_field.field.stylized_name}}); |
120 {%- endfor %} | 127 {%- endfor %} |
121 {%- endif %} | 128 {%- endif %} |
122 {%- if byte.is_padding %} | 129 {%- if byte.is_padding %} |
123 encoder.skip(1); | 130 encoder.skip(1); |
124 {%- endif %} | 131 {%- endif %} |
125 {%- endfor %} | 132 {%- endfor %} |
126 }; | 133 }; |
OLD | NEW |