Files
serialize-js/src/ConstArray.js
2025-08-04 15:33:12 +03:00

43 lines
1.2 KiB
JavaScript

import { parse, serialize, sizeofHead, Type } from "."
export function ConstArray(size) {
const obj = { _size: size }
Object.setPrototypeOf(obj, ConstArray.prototype)
obj.new(ConstArray, arguments)
return obj
}
ConstArray.prototype.serialize = function(dv, src, ...inner_types) {
const item_size = sizeofHead(src[0])
const size = this._size
if (dv.byteLength < size * item_size) {
throw new Error('too small buffer')
}
for (let i = 0; i < size; i++) {
const item_frame = new DataView(dv.buffer, dv.byteOffset + item_size * i)
serialize(item_frame, src[i], ...inner_types)
}
return
}
ConstArray.prototype.parse = function(dv, ...inner_types) {
const size = this._size
const item_size = sizeofHead(...inner_types)
const array = Array(size)
for (let i = 0; i < size; i++) {
const item_frame = new DataView(dv.buffer, dv.byteOffset + item_size * i)
array[i] = parse(item_frame, ...inner_types)
}
return array
}
ConstArray.prototype.isHeadless = function() {
return false
}
ConstArray.prototype.sizeof = function(...inner_types) {
return sizeofHead(...inner_types) * this._size
}
Object.setPrototypeOf(ConstArray.prototype, Type.prototype)
Object.freeze(ConstArray.prototype)