1cb93a386Sopenharmony_ci/// <reference path="../bindings/embind.d.ts" /> 2cb93a386Sopenharmony_ci/// <reference path="public_api.d.ts" /> 3cb93a386Sopenharmony_ci// eslint-disable-next-line @typescript-eslint/no-unused-vars 4cb93a386Sopenharmony_cinamespace memory { 5cb93a386Sopenharmony_ci declare const Module: embind.EmbindModule; 6cb93a386Sopenharmony_ci export const nullptr = 0; 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci export const copy1dArray = (arr: number[] | public_api.TypedArray | null, 9cb93a386Sopenharmony_ci dest: Heaps, ptr?: number): number => { 10cb93a386Sopenharmony_ci if (!arr || !arr.length) { 11cb93a386Sopenharmony_ci return nullptr; 12cb93a386Sopenharmony_ci } 13cb93a386Sopenharmony_ci const bytesPerElement = Module[dest].BYTES_PER_ELEMENT; 14cb93a386Sopenharmony_ci ptr ||= Module._malloc(arr.length * bytesPerElement); 15cb93a386Sopenharmony_ci Module[dest].set(arr, ptr / bytesPerElement); 16cb93a386Sopenharmony_ci return ptr; 17cb93a386Sopenharmony_ci }; 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ci export const freeIfNecessary = (ptr: number, arr: any[] | public_api.TypedArray): void => { 20cb93a386Sopenharmony_ci if (arr && !(arr as any)._ck) { 21cb93a386Sopenharmony_ci Module._free(ptr); 22cb93a386Sopenharmony_ci } 23cb93a386Sopenharmony_ci }; 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci // Recommended over enums by Effective Typescript pg 197. 26cb93a386Sopenharmony_ci export type Heaps = 'HEAPF32' | 'HEAPU8' | 'HEAPU16' | 'HEAPU32' | 'HEAP8' | 'HEAP16' | 'HEAP32'; 27cb93a386Sopenharmony_ci} 28