import { Maybe } from "@tsplus/stdlib/data/Maybe/definition"; import { Equivalence } from "@tsplus/stdlib/prelude/Equivalence/definition"; import { Equals } from "@tsplus/stdlib/structure/Equals"; import { Stack } from "@tsplus/stdlib/data/Stack"; /** * @tsplus type HashMap.Node */ export type Node = EmptyNode | LeafNode | CollisionNode | IndexedNode | ArrayNode; /** * @tsplus type HashMap.Node.Ops */ export interface NodeOps { } export declare const Node: NodeOps; export interface SizeRef { value: number; } export declare class EmptyNode { readonly _tag = "EmptyNode"; modify(edit: number, _shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } export declare function isEmptyNode(a: unknown): a is EmptyNode; export declare function isLeafNode(node: Node): node is EmptyNode | LeafNode | CollisionNode; export declare function canEditNode(node: Node, edit: number): boolean; export type KeyEq = Equivalence["equals"]; export type UpdateFn = (v: Maybe) => Maybe; export declare class LeafNode { readonly edit: number; readonly hash: number; readonly key: K; value: Maybe; readonly _tag = "LeafNode"; constructor(edit: number, hash: number, key: K, value: Maybe); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } export declare class CollisionNode { readonly edit: number; readonly hash: number; readonly children: Array>; readonly _tag = "CollisionNode"; constructor(edit: number, hash: number, children: Array>); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; updateCollisionList(mutate: boolean, edit: number, hash: number, list: Node[], f: UpdateFn, key: K, size: SizeRef): Node[]; } export declare class IndexedNode { readonly edit: number; mask: number; children: Array>; readonly _tag = "IndexedNode"; constructor(edit: number, mask: number, children: Array>); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } export declare class ArrayNode { readonly edit: number; size: number; children: Array>; readonly _tag = "ArrayNode"; constructor(edit: number, size: number, children: Array>); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } //# sourceMappingURL=node.d.ts.map