/
buffer.ts
23 lines (21 loc) · 1018 Bytes
/
buffer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import type { PAG } from '../types';
export const writeBufferToWasm = (module: PAG, data: ArrayLike<number> | ArrayBufferLike) => {
const uint8Array = new Uint8Array(data);
const numBytes = uint8Array.byteLength;
const dataPtr = module._malloc(numBytes);
const dataOnHeap = new Uint8Array(module.HEAPU8.buffer, dataPtr, numBytes);
dataOnHeap.set(uint8Array);
return { byteOffset: dataPtr, length: numBytes, free: () => module._free(dataPtr) };
};
export const readBufferFromWasm = (
module: PAG,
data: ArrayLike<number> | ArrayBufferLike,
handle: (byteOffset: number, length: number) => boolean,
) => {
const uint8Array = new Uint8Array(data);
const dataPtr = module._malloc(uint8Array.byteLength);
if (!handle(dataPtr, uint8Array.byteLength)) return { data: null, free: () => module._free(dataPtr) };
const dataOnHeap = new Uint8Array(module.HEAPU8.buffer, dataPtr, uint8Array.byteLength);
uint8Array.set(dataOnHeap);
return { data: uint8Array, free: () => module._free(dataPtr) };
};