/** * 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