export declare type Merger<T> = (left: T, right: T) => T | [T, T];
/**
 * The two ended array supports pushing both at the beginning and
 * at the end while preserving indicies.
 */
export declare class TwoEndedArray<T extends {
    index: number;
}> {
    private _postive;
    private _negative;
    addToEnd(elem: T): void;
    addToBeginning(elem: T): void;
    mergeAtEnd(value: T, merger: Merger<T>): void;
    mergeAtBeginning(value: T, merger: Merger<T>): void;
    removeFromEnd(): void;
    has(idx: number): boolean;
    get(idx: number): T;
    set(idx: number, value: T): void;
    get lastIdx(): number;
    get last(): T;
    get firstIdx(): number;
    get first(): T;
    get length(): number;
}
//# sourceMappingURL=TwoEndedArray.d.ts.map