UNPKG

@thi.ng/idgen

Version:

Generator of opaque numeric identifiers with optional support for ID versioning and efficient re-use

88 lines 2.78 kB
import type { Event, IClear, IIDGen, INotify, Listener } from "@thi.ng/api"; import { type IDGenEventType } from "./api.js"; export declare class IDGen implements Iterable<number>, IClear, IIDGen<number>, INotify<IDGenEventType> { readonly ids: number[]; protected nextID: number; protected _freeID: number; protected start: number; protected num: number; protected _capacity: number; protected mask: number; protected vmask: number; protected shift: number; constructor(bits?: number, vbits?: number, cap?: number, start?: number); /** * Extract actual ID (without version bits). * * @param id - */ id(id: number): number; /** * Extract version from ID * * @param id - */ version(id: number): number; get capacity(): number; /** * Attempts to set new capacity to given value. Capacity can only be * increased and the operation is only supported for unversioned * instances (i.e. vbits = 0). */ set capacity(newCap: number); /** * Number of remaining available IDs. */ get available(): number; /** * Number of currently used IDs. */ get used(): number; /** * Next available free ID. */ get freeID(): number; [Symbol.iterator](): Generator<number, void, unknown>; /** * Frees all existing IDs and resets counter to original start ID. */ clear(): void; /** * Returns next available ID or throws error (assertion) if no further IDs * are currently available. Emits {@link EVENT_ADDED} if successful. */ next(): number; /** * Marks given ID as available again and increases its version (if * versioning is enabled). Emits {@link EVENT_REMOVED} if successful. * * @param id - */ free(id: number): boolean; /** * Returns true iff the given ID is valid and currently used. * * @param id - */ has(id: number): boolean; addListener(id: IDGenEventType, fn: Listener<IDGenEventType>, scope?: any): boolean; removeListener(id: IDGenEventType, fn: Listener<IDGenEventType>, scope?: any): boolean; notify(event: Event<IDGenEventType>): boolean; protected nextVersion(id: number): number; } /** * Returns a new {@link IDGen} instance configured to use given counter & * version bits. * * @remarks * Overall ID range/capacity can be explicitly limited using `cap` (default and * maximum: 2^bits). The start ID can be defined via `start` (default: 0) and * MUST be < `cap`. * * @param bits - * @param vbits - * @param cap - * @param start - */ export declare const idgen: (bits?: number, vbits?: number, cap?: number, start?: number) => IDGen; //# sourceMappingURL=idgen.d.ts.map