import { BufferView } from 'utilium/buffer'; import { Pointer } from './pointer.js'; import { Void, type Type } from './types.js'; export interface MemoryUsage { total: number; used: number; free: number; } /** * A generic memory allocator interface. */ export interface Memory extends ArrayBufferView { /** * The total size in bytes of this memory. */ readonly size: number; /** * Returns the usage of this memory. */ usage(): U; /** * Allocates `size` bytes of memory. */ alloc(size: number): Pointer; /** * Frees a section of memory. */ free(addr: number | Pointer): void; /** * Reallocates a section of memory. */ realloc(addr: number | Pointer, size: number): Pointer; /** * Useful for memory that supports multiple buffers. * This returns the buffer, offset in the buffer, and remaining length at a given address. */ at(addr: number): ArrayBufferView; } /** * Keeps track of the last `Memory` instance created. * This is used as defaults for various interfaces. * @internal */ export declare let _lastMemory: Memory | undefined; export interface Section { size: number; isFree: boolean; } /** * A memory manager that works with a single array buffer. * It is not designed for use-cases involving multiple realms or serialization. */ export declare class ArrayBufferMemory extends BufferView implements Memory { get size(): number; /** * A map of offsets to sections. * Spare arrays are used for auto-sort and other "magic". */ protected map: Section[]; constructor(buffer?: T | ArrayBufferView | ArrayLike | number, byteOffset?: number, byteLength?: number); /** * Collects all free sections that are adjacent to the section at the given address. * * @remarks * This function assumes the provided section exists in the map. */ protected collectFreeSections(at: number | Pointer): void; alloc(size: number): Pointer; free(addr: number | Pointer): void; realloc(at: number | Pointer, size: number): Pointer; usage(): MemoryUsage; at(addr: number): Uint8Array; }