UNPKG

sonic-forest

Version:

High-performance (binary) tree and sorted map implementation (AVL, Splay, Radix, Red-Black)

39 lines (38 loc) 1.46 kB
import type { Printable } from 'tree-dump'; export interface ITreeNode<K = unknown, V = unknown> { p: ITreeNode<K, V> | undefined; l: ITreeNode<K, V> | undefined; r: ITreeNode<K, V> | undefined; k: K; v: V; } export interface HeadlessNode { p: HeadlessNode | undefined; l: HeadlessNode | undefined; r: HeadlessNode | undefined; } export type Comparator<T> = (a: T, b: T) => number; export interface SonicNodePublicReference<N extends Pick<ITreeNode, 'k' | 'v'>> { readonly k: N['k']; v: N['v']; } export interface SonicMap<K, V, Node extends ITreeNode<K, V> = ITreeNode<K, V>> extends Printable { root: Node | undefined; comparator: Comparator<K>; get(k: K): V | undefined; del(k: K): boolean; clear(): void; has(k: K): boolean; size(): number; isEmpty(): boolean; next: <N extends HeadlessNode>(curr: N) => N | undefined; set(k: K, v: V): SonicNodePublicReference<Node>; first(): SonicNodePublicReference<Node> | undefined; last(): SonicNodePublicReference<Node> | undefined; find(k: K): SonicNodePublicReference<Node> | undefined; getOrNextLower(k: K): SonicNodePublicReference<Node> | undefined; forEach(fn: (node: SonicNodePublicReference<Node>) => void): void; iterator0(): () => undefined | SonicNodePublicReference<Node>; iterator(): Iterator<SonicNodePublicReference<Node>>; entries(): IterableIterator<SonicNodePublicReference<Node>>; }