@thi.ng/wasm-api
Version:
Generic, modular, extensible API bridge and infrastructure for hybrid JS & WebAssembly projects
41 lines (40 loc) • 1.05 kB
JavaScript
const __instanceArray = (type, addr, num, size = type.size) => {
const items = [];
for (; num-- > 0; addr += size) items.push(type.instance(addr));
return items;
};
const __array = (mem, ctor, addr, len) => __instanceArray(ctor(mem), addr, len);
const __slice32 = (mem, ctor, offset) => {
return __array(
mem,
ctor,
mem.u32[offset >>> 2],
mem.u32[offset + 4 >>> 2]
);
};
const __slice64 = (mem, ctor, offset) => {
return __array(
mem,
ctor,
Number(mem.u64[offset >>> 3]),
Number(mem.u64[offset + 8 >>> 3])
);
};
const __primslice32 = (mem, view, offset, shift) => {
const addr = mem.u32[offset >>> 2] >>> shift;
const len = mem.u32[offset + 4 >>> 2];
return view.subarray(addr, addr + len);
};
const __primslice64 = (mem, view, offset, shift) => {
const addr = Number(mem.u64[offset >>> 3]) >>> shift;
const len = Number(mem.u64[offset + 8 >>> 3]);
return view.subarray(addr, addr + len);
};
export {
__array,
__instanceArray,
__primslice32,
__primslice64,
__slice32,
__slice64
};