@thi.ng/idgen
Version:
Generator of opaque numeric identifiers with optional support for ID versioning and efficient re-use
88 lines • 2.78 kB
TypeScript
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