import { OrderedMapIterator } from './SortedMapIterator';
import { TreeNode } from './SortedMapNode';
import { TreeNodeEnableIndex } from './SortedMapNode';
import type { Comparator, SonicMap, SonicNodePublicReference } from '../types';
export declare class SortedMap<K, V> implements SonicMap<K, V, TreeNode<K, V>> {
    enableIndex: boolean;
    protected _header: TreeNode<K, V> | TreeNodeEnableIndex<K, V>;
    protected _root: TreeNode<K, V> | undefined;
    protected readonly _TreeNodeClass: typeof TreeNode | typeof TreeNodeEnableIndex;
    constructor(comparator?: Comparator<K>, enableIndex?: boolean);
    protected _length: number;
    get length(): number;
    empty(): boolean;
    protected _lowerBound(curNode: TreeNode<K, V> | undefined, key: K): TreeNode<K, V>;
    protected _upperBound(curNode: TreeNode<K, V> | undefined, key: K): TreeNode<K, V> | TreeNodeEnableIndex<K, V>;
    protected _reverseLowerBound(curNode: TreeNode<K, V> | undefined, key: K): TreeNode<K, V>;
    protected _reverseUpperBound(curNode: TreeNode<K, V> | undefined, key: K): TreeNode<K, V> | TreeNodeEnableIndex<K, V>;
    protected _eraseNodeSelfBalance(curNode: TreeNode<K, V>): void;
    protected _eraseNode(curNode: TreeNode<K, V>): void;
    protected _insertNodeSelfBalance(curNode: TreeNode<K, V>): void;
    protected _set(key: K, value: V, hint?: OrderedMapIterator<K, V>): number;
    protected _getTreeNodeByKey(curNode: TreeNode<K, V> | undefined, key: K): TreeNode<K, V>;
    updateKeyByIterator(iter: OrderedMapIterator<K, V>, key: K): boolean;
    eraseElementByPos(pos: number): void;
    eraseElementByKey(key: K): boolean;
    eraseElementByIterator(iter: OrderedMapIterator<K, V>): OrderedMapIterator<K, V>;
    getHeight(): number;
    begin(): OrderedMapIterator<K, V>;
    end(): OrderedMapIterator<K, V>;
    rBegin(): OrderedMapIterator<K, V>;
    rEnd(): OrderedMapIterator<K, V>;
    front(): [K, V] | undefined;
    back(): [K, V] | undefined;
    lowerBound(key: K): OrderedMapIterator<K, V>;
    upperBound(key: K): OrderedMapIterator<K, V>;
    reverseLowerBound(key: K): OrderedMapIterator<K, V>;
    reverseUpperBound(key: K): OrderedMapIterator<K, V>;
    setElement(key: K, value: V, hint?: OrderedMapIterator<K, V>): number;
    getElementByPos(pos: number): void;
    getElementByKey(key: K): V;
    min: TreeNode<K, V> | undefined;
    root: TreeNode<K, V> | undefined;
    max: TreeNode<K, V> | undefined;
    readonly comparator: Comparator<K>;
    set(k: K, v: V): SonicNodePublicReference<TreeNode<K, V>>;
    find(k: K): SonicNodePublicReference<TreeNode<K, V>> | undefined;
    get(k: K): V | undefined;
    del(k: K): boolean;
    clear(): void;
    has(k: K): boolean;
    _size: number;
    size(): number;
    isEmpty(): boolean;
    getOrNextLower(k: K): TreeNode<K, V> | undefined;
    forEach(fn: (node: TreeNode<K, V>) => void): void;
    first(): TreeNode<K, V> | undefined;
    last(): TreeNode<K, V> | undefined;
    readonly next: <N extends import("../types").HeadlessNode>(curr: N) => N | undefined;
    iterator0(): () => undefined | TreeNode<K, V>;
    iterator(): Iterator<TreeNode<K, V>>;
    entries(): IterableIterator<TreeNode<K, V>>;
    toString(tab: string): string;
}
