|
179 | 179 | /** |
180 | 180 | * Revert ArrayBuffer to JSON. |
181 | 181 | * @param {number} offset The start of the DataView where to read the data. |
182 | | - * @param {Object} obj The template of the JSON. |
| 182 | + * @param {Object} template The template of the JSON. |
183 | 183 | * @param {ArrayBuffer|Buffer|DataView} source The ArrayBuffer, or the Buffer in Node.js, or the DataView of the ArrayBuffer. |
184 | 184 | */ |
185 | | - let decode = (offset, obj, source) => { |
| 185 | + let decode = (offset, template, source) => { |
186 | 186 | let view; |
187 | | - if (obj instanceof Object) { |
| 187 | + if (template instanceof Object) { |
188 | 188 | view = source instanceof DataView ? source : new DataView(source instanceof ArrayBuffer ? source : new Uint8Array(source).buffer); |
189 | | - if (obj instanceof Array) { |
190 | | - obj.length = view.getUint8(offset++); |
191 | | - obj.join().split(',').forEach((item, i) => obj[i] = extend(true, {}, obj[0])); |
| 189 | + if (template instanceof Array) { |
| 190 | + template.length = view.getUint8(offset++); |
| 191 | + template.join().split(',').forEach((item, i) => template[i] = extend(true, {}, template[0])); |
192 | 192 | } |
193 | | - if (obj instanceof Array && obj[0] instanceof Object) { |
194 | | - obj.forEach(item => offset = decode(offset, item, view)); |
| 193 | + if (template instanceof Array && template[0] instanceof Object) { |
| 194 | + template.forEach(item => offset = decode(offset, item, view)); |
195 | 195 | } else { |
196 | | - Object.keys(obj).sort().forEach(item => { |
197 | | - if (obj[item] instanceof Object) { |
198 | | - offset = decode(offset, obj[item], view); |
199 | | - } else if (obj[item] === 'number') { |
| 196 | + Object.keys(template).sort().forEach(item => { |
| 197 | + if (template[item] instanceof Object) { |
| 198 | + offset = decode(offset, template[item], view); |
| 199 | + } else if (template[item] === 'number') { |
200 | 200 | switch (view.getUint8(offset++)) { |
201 | 201 | case 0: |
202 | | - obj[item] = view.getUint8(offset); |
| 202 | + template[item] = view.getUint8(offset); |
203 | 203 | offset += 1; |
204 | 204 | break; |
205 | 205 | case 1: |
206 | | - obj[item] = view.getInt8(offset); |
| 206 | + template[item] = view.getInt8(offset); |
207 | 207 | offset += 1; |
208 | 208 | break; |
209 | 209 | case 2: |
210 | | - obj[item] = view.getUint16(offset); |
| 210 | + template[item] = view.getUint16(offset); |
211 | 211 | offset += 2; |
212 | 212 | break; |
213 | 213 | case 3: |
214 | | - obj[item] = view.getInt16(offset); |
| 214 | + template[item] = view.getInt16(offset); |
215 | 215 | offset += 2; |
216 | 216 | break; |
217 | 217 | case 4: |
218 | | - obj[item] = view.getUint32(offset); |
| 218 | + template[item] = view.getUint32(offset); |
219 | 219 | offset += 4; |
220 | 220 | break; |
221 | 221 | case 5: |
222 | | - obj[item] = view.getInt32(offset); |
| 222 | + template[item] = view.getInt32(offset); |
223 | 223 | offset += 4; |
224 | 224 | break; |
225 | 225 | case 6: |
226 | | - obj[item] = view.getFloat32(offset); |
| 226 | + template[item] = view.getFloat32(offset); |
227 | 227 | offset += 4; |
228 | 228 | break; |
229 | 229 | case 7: |
230 | | - obj[item] = view.getFloat64(offset); |
| 230 | + template[item] = view.getFloat64(offset); |
231 | 231 | offset += 8; |
232 | 232 | break; |
233 | 233 | } |
234 | 234 | } else { |
235 | | - obj[item] = String.fromCharCode.apply(null, new Array(view.getUint8(offset++)).join().split(',').map(() => { |
| 235 | + template[item] = String.fromCharCode.apply(null, new Array(view.getUint8(offset++)).join().split(',').map(() => { |
236 | 236 | let code = view.getUint16(offset); |
237 | 237 | offset += 2; |
238 | 238 | return code; |
|
0 commit comments