import type { Comparator, Fn, ICompare, IEmpty, ISeq, ISeqable, IStack, Maybe } from "@thi.ng/api";
import type { IRandom } from "@thi.ng/random";
import { AList } from "./alist.js";
import type { ConsCell } from "./api.js";
export declare class DCons<T> extends AList<DCons<T>, T> implements ICompare<DCons<T>>, IEmpty<DCons<T>>, IStack<T, T, DCons<T>>, ISeqable<T> {
    protected _tail: Maybe<ConsCell<T>>;
    constructor(src?: Iterable<T>);
    get tail(): Maybe<ConsCell<T>>;
    append(value: T): ConsCell<T>;
    asHead(cell: ConsCell<T>): this;
    asTail(cell: ConsCell<T>): this;
    /** @deprecated use {@link DCons.prepend} */
    cons(value: T): DCons<T>;
    copy(): DCons<T>;
    cycle(): Generator<T, void, unknown>;
    drop(): T | undefined;
    empty(): DCons<T>;
    insertAfter(cell: ConsCell<T>, value: T): ConsCell<T>;
    insertAfterNth(n: number, x: T): ConsCell<T>;
    insertBefore(cell: ConsCell<T>, value: T): ConsCell<T>;
    insertBeforeNth(n: number, x: T): ConsCell<T>;
    map<R>(fn: Fn<T, R>): DCons<R>;
    nth(n: number, notFound?: T): T | undefined;
    nthCell(n: number): Maybe<ConsCell<T>>;
    pop(): T | undefined;
    prepend(value: T): ConsCell<T>;
    push(value: T): DCons<T>;
    release(): boolean;
    remove(cell: ConsCell<T>): this;
    rotateLeft(): DCons<T>;
    rotateRight(): this;
    /**
     * Implementation of
     * [ISeqable.seq](https://docs.thi.ng/umbrella/api/interfaces/ISeqable.html#seq.seq-1)
     */
    seq(start?: number, end?: number): ISeq<T> | undefined;
    /**
     * Shuffles list by probabilistically moving cells to head or tail
     * positions.
     *
     * @remarks
     * Supports configurable iterations and custom PRNG via
     * [`IRandom`](https://docs.thi.ng/umbrella/random/interfaces/IRandom.html)
     * (default:
     * [`SYSTEM`](https://docs.thi.ng/umbrella/random/variables/SYSTEM.html)).
     *
     * Default iterations: `ceil(3/2 * log2(n))`
     *
     * @param iter -
     * @param rnd -
     */
    shuffle(iter?: number, rnd?: IRandom): this;
    slice(from?: number, to?: number): DCons<T>;
    /**
     * Merge sort implementation based on Simon Tatham's algorithm:
     * https://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
     *
     * @remarks
     * Uses
     * [`compare`](https://docs.thi.ng/umbrella/compare/functions/compare.html)
     * as default comparator.
     *
     * @param cmp -
     */
    sort(cmp?: Comparator<T>): this;
    splice(at: ConsCell<T> | number, del?: number, insert?: Iterable<T>): DCons<T>;
}
/**
 * Functional syntax sugar for `new DCons(src?)`.
 *
 * @param src -
 */
export declare const defDCons: <T>(src?: Iterable<T>) => DCons<T>;
/**
 * @deprecated use {@link defDCons} instead
 */
export declare const dcons: <T>(src?: Iterable<T>) => DCons<T>;
//# sourceMappingURL=dcons.d.ts.map