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