structurae
Advanced tools
Comparing version
@@ -7,2 +7,6 @@ # Changelog | ||
## [3.0.3] - 2020-04-03 | ||
### Added | ||
- MapView can be used within a larger buffer. | ||
## [3.0.2] - 2020-04-02 | ||
@@ -9,0 +13,0 @@ ### Added |
@@ -39,9 +39,9 @@ const { ObjectView, ObjectViewMixin } = require('./object-view'); | ||
getLayout(field) { | ||
const { layout, fields } = this.constructor; | ||
const { layout } = this.constructor; | ||
const definition = layout[field]; | ||
if (!definition) throw TypeError(`Field "${field}" is not found.`); | ||
const { View, start } = definition; | ||
const fieldStart = this.getUint32(start << 2, true); | ||
const end = start < fields.length - 1 ? this.getUint32(start + 1 << 2, true) | ||
: this.byteLength; | ||
const startOffset = start << 2; | ||
const fieldStart = this.getUint32(startOffset, true); | ||
const end = this.getUint32(startOffset + 4, true); | ||
return [View, fieldStart, end]; | ||
@@ -105,8 +105,9 @@ } | ||
const start = offsets[i]; | ||
const end = i < fieldCount - 1 ? offsets[i + 1] : length; | ||
const end = offsets[i + 1]; | ||
if (start === end) continue; | ||
const field = fields[i]; | ||
const { View } = layout[field]; | ||
View.from(value[field], view, view.byteOffset + start, end - start); | ||
View.from(value[field], view, start, end - start); | ||
} | ||
view.setUint32(fieldCount << 2, offsets[fieldCount], true); | ||
return view; | ||
@@ -125,4 +126,4 @@ } | ||
const fieldCount = fields.length; | ||
let length = fieldCount << 2; | ||
const offsets = new Array(fieldCount).fill(0); | ||
let length = (fieldCount + 1) << 2; | ||
const offsets = new Array(fieldCount + 1).fill(0); | ||
for (let i = 0; i < fieldCount; i++) { | ||
@@ -137,2 +138,3 @@ const field = fields[i]; | ||
} | ||
offsets[fieldCount] = length; | ||
return !getOffsets ? length : [length, offsets]; | ||
@@ -150,12 +152,11 @@ } | ||
const { layout, fields } = this; | ||
const lastFieldId = fields.length - 1; | ||
const object = {}; | ||
for (let i = 0; i <= lastFieldId; i++) { | ||
for (let i = 0; i < fields.length; i++) { | ||
const field = fields[i]; | ||
const { View } = layout[field]; | ||
const fieldStart = view.getUint32(i << 2, true); | ||
const end = i < lastFieldId ? view.getUint32(i + 1 << 2, true) | ||
: view.byteLength; | ||
const startOffset = start + (i << 2); | ||
const fieldStart = view.getUint32(startOffset, true); | ||
const end = view.getUint32(startOffset + 4, true); | ||
if (fieldStart === end) continue; | ||
object[field] = View.toJSON(view, view.byteOffset + start + fieldStart, end - fieldStart); | ||
object[field] = View.toJSON(view, start + fieldStart, end - fieldStart); | ||
} | ||
@@ -162,0 +163,0 @@ return object; |
{ | ||
"name": "structurae", | ||
"version": "3.0.2", | ||
"version": "3.0.3", | ||
"description": "Data structures for performance-sensitive modern JavaScript applications.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
215707
0.03%5773
0.02%