import { ChangeFlag, Persistent } from '@collectable/core'; export declare type AnyNode = Empty | Leaf | Collision | Indexed | ListNode; export declare type GetValueFn = (value?: V) => V; export declare type Modify = (owner: Persistent, change: ChangeFlag, shift: number, get: GetValueFn, hash: number, key: K) => AnyNode; export declare type ChildNode = Empty | Leaf; export declare type ChildrenNodes = Array>; export interface Node extends Persistent { type: NodeType; modify: Modify; } export interface Empty extends Node { type: NodeType.EMPTY; } export interface Leaf extends Node { type: NodeType.LEAF; hash: number; key: K; value: V; } export interface Collision extends Node { type: NodeType.COLLISION; hash: number; children: Array>; } export interface Indexed extends Node { type: NodeType.INDEX; mask: number; children: ChildrenNodes; } export interface ListNode extends Node { type: NodeType.ARRAY; size: number; children: Array>; } export declare const enum NodeType { EMPTY = 0, LEAF = 1, COLLISION = 2, INDEX = 3, ARRAY = 4, }