import { Option } from './platform-utils'; export interface Destroyable { destroy(): void; } export interface LinkedListNode { next: Option; prev: Option; } export declare class ListNode implements LinkedListNode { next: Option>; prev: Option>; value: T; constructor(value: T); } export declare class LinkedList implements Slice { static fromSlice(slice: Slice): LinkedList; private _head; private _tail; constructor(); head(): Option; tail(): Option; clear(): void; isEmpty(): boolean; toArray(): T[]; splice(start: T, end: T, reference: T): void; nextNode(node: T): T; prevNode(node: T): T; forEachNode(callback: (node: T) => void): void; contains(needle: T): boolean; insertBefore(node: T, reference?: Option): T; append(node: T): T; pop(): Option; prepend(node: T): T; remove(node: T): T; } export interface Slice { head(): Option; tail(): Option; nextNode(node: T): Option; prevNode(node: T): Option; forEachNode(callback: (node: T) => void): void; toArray(): T[]; isEmpty(): boolean; contains(needle: T): boolean; } export interface CloneableListNode extends LinkedListNode { clone(): this; } export declare class ListSlice implements Slice { static toList(slice: Slice): LinkedList; private _head; private _tail; constructor(head: Option, tail: Option); forEachNode(callback: (node: T) => void): void; contains(needle: T): boolean; head(): Option; tail(): Option; toArray(): T[]; nextNode(node: T): Option; prevNode(node: T): Option; isEmpty(): boolean; } export declare const EMPTY_SLICE: ListSlice;