UNPKG

rc-js-util

Version:

A collection of TS and C++ utilities to help writing performant and correct applications, achieved through strict typing and (removable) invariant checking.

77 lines (68 loc) 2.01 kB
import type { IBroadcastChannel } from "../eventing/i-broadcast-channel.js"; import { type IManagedResourceLinks } from "./managed-resource-links.js"; import type { IEmscriptenWrapper } from "../web-assembly/emscripten/i-emscripten-wrapper.js"; import type { IInteropBindings } from "../web-assembly/emscripten/i-interop-bindings.js"; /** * @public * An object which has a pointer to some shared memory location. */ export interface IPointer { pointer: number; } /** * @public * A listener for {@link IManagedResourceNode}. */ export interface IOnFreeListener { /** * Should be called once the resource has been freed. */ onFree(): void; } /** * @public * Represents a resource that must be manually released. Each node (excluding the root node, provided by the wrapper) * should have one or more owners. When the owner is finished with the resource, they should unlink it; in the case * that all owners have dropped the reference, the resource is destroyed. * * You can create a node using {@link ILifecycleStrategy.createNode} (found on {@link IEmscriptenWrapper}. */ export interface IManagedResourceNode { readonly onFreeChannel: IBroadcastChannel<"onFree", []>; getIsDestroyed(): boolean; getLinked(): IManagedResourceLinks; /** * @internal */ onClaimed(byNode: IManagedResourceNode): void; /** * @internal */ onReleased(byNode: IManagedResourceNode): void; } /** * @public * An object which is backed by some sort of shared resource, holds a handle to a {@link IManagedResourceNode}. */ export interface IManagedObject<TModule extends IInteropBindings = IInteropBindings> { readonly resourceHandle: IManagedResourceNode; getWrapper(): IEmscriptenWrapper<TModule>; } /** * @public */ export class PointerDebugMetadata { public constructor ( public readonly address: number, public readonly isOwning: boolean, public readonly instanceName: string, ) { } }