import type { Fn2, Predicate } from "@thi.ng/api";
import type { ConsCell } from "./api.js";
import { DCons } from "./dcons.js";
/**
 * Self-organization function/handler. Attempts to re-order given list cell and
 * returns cell containing original cell's value after re-ordering. E.g. in
 * transpose strategy the original cell's value will now be in predecessor.
 */
export type SOFn<T> = Fn2<SOL<T>, ConsCell<T>, ConsCell<T>>;
/**
 * Self-organizing version of {@link DCons} using given re-ordering function.
 *
 * @remarks
 * The list will only be re-ordered upon execution of:
 *
 * - `nth()`
 * - `setNth()`
 * - `setTail()`
 * - `find()`
 * - `findWith()`
 *
 * Reference:
 * https://en.wikipedia.org/wiki/Self-organizing_list
 */
export declare class SOL<T> extends DCons<T> {
    protected _reorder: SOFn<T>;
    constructor(_reorder: SOFn<T>, src?: Iterable<T>);
    copy(): SOL<T>;
    empty(): SOL<T>;
    find(value: T): ConsCell<T> | undefined;
    findWith(fn: Predicate<T>): ConsCell<T> | undefined;
    nth(n: number, notFound?: T): T | undefined;
    setNth(n: number, v: T): import("@thi.ng/api").Maybe<ConsCell<T>>;
    setTail(value: T): ConsCell<T>;
}
/**
 * Creates self-organizing list using Move-To-Front strategy.
 *
 * @remarks
 * Reference:
 * https://en.wikipedia.org/wiki/Self-organizing_list#Move_to_front_method_(MTF)
 */
export declare const defMTF: <T>(src?: Iterable<T>) => SOL<T>;
/**
 * Created self-organizing list using Swap-With-Neighbor (transpose) strategy.
 *
 * @remarks
 * Reference:
 * https://en.wikipedia.org/wiki/Self-organizing_list#Transpose_method
 */
export declare const defTranspose: <T>(src?: Iterable<T>) => SOL<T>;
//# sourceMappingURL=sol.d.ts.map