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