export declare type Comparator<T> = (value1: T, value2: T) => number;
export declare type Nullable<T> = T | null;
export interface Handle<T = any> {
    value: T;
}
export declare abstract class Storage<T> {
    private _cmpFunc;
    constructor(cmpFunc: Comparator<T>);
    heapify(values: IterableIterator<T>): void;
    get comparator(): Comparator<T>;
    set comparator(cmpFunc: Comparator<T>);
    abstract get size(): number;
    abstract clear(): void;
    adjust(_handle: Handle<T>): void;
    abstract get sortedHandles(): IterableIterator<Handle<T>>;
    abstract get isEmpty(): boolean;
    abstract get top(): Handle<T>;
    abstract pop(): Handle<T>;
    abstract push(value: T): Handle<T>;
    abstract remove(handle: Handle<T>): Handle<T>;
}
