/**
* Controls how a {@link List}'s walk operation behaves
* after each iteration.
*/
export type ListWalkDecision = {
deleteItem?: boolean;
insertAfter?: T;
insertBefore?: T;
keepWalking: boolean;
};
/**
* Basic list-like structure.
*/
export type List = {
at(index: number): T | undefined;
get head(): T | undefined;
insertAt(index: number, value: T): void;
get isEmpty(): boolean;
get length(): number;
pop(): T | undefined;
push(value: T): void;
shift(): T | undefined;
toArray(): T[];
unshift(value: T): void;
values(): Generator;
valuesAndIndexes(): Generator<[T, number], void, undefined>;
walk(block: (value: T, index: number) => ListWalkDecision): void;
readonly [Symbol.toStringTag]: string;
};
/**
* Builder for a single-linked list.
*/
export declare const singleLinkedList: () => List;
/**
* Mixin for additional methods available when the linked list
* is double-linked.
*/
export type DoubleLinkedList = List & {
get tail(): T | undefined;
reverseValues(): Generator;
reverseValuesAndIndexes(): Generator<[T, number], void, undefined>;
reverseWalk(block: (value: T, index: number) => ListWalkDecision): void;
};
/**
* Build a doubly-linked list.
*/
export declare const doubleLinkedList: () => DoubleLinkedList;
//# sourceMappingURL=linked-list.d.ts.map