sonic-forest
Version:
High-performance (binary) tree and sorted map implementation (AVL, Splay, Radix, Red-Black)
39 lines (38 loc) • 1.46 kB
TypeScript
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>>;
}