import type { Fn, ICompare, ICopy, IEmpty, ISeq, Maybe } from "@thi.ng/api";
import { AList } from "./alist.js";
import type { ConsCell } from "./api.js";
/**
 * A closed-loop doubly-linked list/ring with a similar (but more limited API)
 * as {@link DCons}.
 */
export declare class DRing<T> extends AList<DRing<T>, T> implements ICopy<DRing<T>>, ICompare<DRing<T>>, IEmpty<DRing<T>> {
    constructor(src?: Iterable<T>);
    get tail(): Maybe<ConsCell<T>>;
    append(value: T): ConsCell<T>;
    copy(): DRing<T>;
    drop(): T | undefined;
    empty(): DRing<T>;
    insertBefore(cell: ConsCell<T>, value: T): ConsCell<T>;
    insertAfter(cell: ConsCell<T>, value: T): ConsCell<T>;
    map<R>(fn: Fn<T, R>): DRing<R>;
    nth(n: number, notFound?: T): T | undefined;
    nthCell(n: number): Maybe<ConsCell<T>>;
    prepend(value: T): ConsCell<T>;
    remove(v: ConsCell<T>): void;
    rotateLeft(): this;
    rotateRight(): this;
    /**
     * Implementation of
     * [ISeqable.seq](https://docs.thi.ng/umbrella/api/interfaces/ISeqable.html#seq.seq-1)
     */
    seq(): ISeq<T> | undefined;
    traverse(fn: Fn<ConsCell<T>, boolean | number>, start?: Maybe<ConsCell<T>>, end?: Maybe<ConsCell<T>>): ConsCell<T> | undefined;
}
/**
 * Functional syntax sugar for `new DRing(src?)`.
 *
 * @param src -
 */
export declare const defDRing: <T>(src?: Iterable<T>) => DRing<T>;
//# sourceMappingURL=ring.d.ts.map