@tsdotnet/linked-list
Version:
A doubly (bidirectional) linked list. Acts as a safe, value focused wrapper for a linked-node-list.
53 lines (52 loc) • 2.11 kB
TypeScript
/*!
* @author electricessence / https://github.com/electricessence/
* Based Upon: http://msdn.microsoft.com/en-us/library/he2s3bh7%28v=vs.110%29.aspx
* Licensing: MIT
*/
import type { LinkedNodeWithValue } from '@tsdotnet/linked-node-list';
import { CollectionBase, ExtendedIterable } from '@tsdotnet/collection-base';
import { type EqualityComparison } from '@tsdotnet/compare';
export interface LinkedListNode<T> extends LinkedNodeWithValue<T> {
previous: LinkedListNode<T> | undefined;
next: LinkedListNode<T> | undefined;
list: LinkedList<T>;
addBefore(item: T): this;
addAfter(item: T): this;
remove(): void;
}
export default class LinkedList<T> extends CollectionBase<T> {
private readonly _listInternal;
constructor(initialValues?: Iterable<T> | null, equalityComparer?: EqualityComparison<T>);
get first(): LinkedListNode<T> | undefined;
get firstValue(): T | undefined;
get last(): LinkedListNode<T> | undefined;
get lastValue(): T | undefined;
get version(): number;
removeOnce(item: T): boolean;
getValueAt(index: number): T | undefined;
getNodeAt(index: number): LinkedListNode<T> | undefined;
find(item: T): LinkedListNode<T> | undefined;
findLast(item: T): LinkedListNode<T> | undefined;
addFirst(item: T): this;
addLast(item: T): this;
takeFirstValue(): T | undefined;
removeFirst(): boolean;
takeLastValue(): T | undefined;
removeLast(): boolean;
removeAt(index: number): boolean;
removeNode(node: LinkedListNode<T>): boolean;
addBefore(before: LinkedListNode<T>, item: T): this;
addAfter(after: LinkedListNode<T>, item: T): this;
incrementVersion(): number;
assertVersion(version: number): true | never;
getCount(): number;
protected _getIterator(): Iterator<T>;
private _reversed?;
get reversed(): ExtendedIterable<T>;
protected _addInternal(item: T): boolean;
protected _removeInternal(item: T, max?: number): number;
protected _clearInternal(): number;
private _findFirst;
private _findLast;
private _removeNodeInternal;
}