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