export declare enum TernaryTreeKind { ternaryTreeBranch = 0, ternaryTreeLeaf = 1 } export type TernaryTreeListTheBranch = { size: number; kind: TernaryTreeKind.ternaryTreeBranch; depth: number; left: TernaryTreeList; middle: TernaryTreeList; right: TernaryTreeList; }; export type TernaryTreeListTheLeaf = { size: number; kind: TernaryTreeKind.ternaryTreeLeaf; value: T; }; export type TernaryTreeList = TernaryTreeListTheBranch | TernaryTreeListTheLeaf; export type TernaryTreeMapHashEntry = { hash: Hash; pairs: Array<[K, V]>; }; export type TernaryTreeMapTheBranch = { kind: TernaryTreeKind.ternaryTreeBranch; size: number; depth: number; maxHash: number; minHash: number; left: TernaryTreeMap; middle: TernaryTreeMap; right: TernaryTreeMap; }; export type TernaryTreeMapTheLeaf = { kind: TernaryTreeKind.ternaryTreeLeaf; hash: number; elements: Array<[K, T]>; }; export type TernaryTreeMap = TernaryTreeMapTheBranch | TernaryTreeMapTheLeaf; export type RefInt = { value: number; }; export type Hash = number; export declare let valueHash: (x: any) => Hash; /** default hash function only handles number and string, need customization */ export declare let hashGenerator: typeof valueHash; /** allow customizing hash function from outside */ export declare let overwriteHashGenerator: (f: typeof hashGenerator) => void; export declare let mergeValueHash: (base: Hash, x: number | string) => Hash;