UNPKG

igniteui-webcomponents-datasources

Version:

Reference custom data providers for the Ignite UI Web Components data source.

117 lines (116 loc) 2.79 kB
import { fromEnum } from "igniteui-webcomponents-core"; export function toArray(en) { return Array.from(fromEnum(en)); } export function first(iter) { for (let v of iter) { return v; } throw new Error("Iterable contained no elements, expected at least one"); } export class LinkedList { get first() { return this._first; } get last() { return this._last; } addFirst(item) { if (this._first == null) { this._first = new LinkedListNode(item); this._last = this._first; } else { var oldFirst = this._first; this._first = new LinkedListNode(item); this._first.next = oldFirst; oldFirst.prev = this._first; } } addLast(item) { if (this._last == null) { this._first = new LinkedListNode(item); this._last = this._first; } else { var oldLast = this._last; this._last = new LinkedListNode(item); this._last.prev = oldLast; oldLast.next = this._last; } } removeFirst() { this.remove(this.first); } clear() { this._first = null; this._last = null; } contains(value) { let curr = this.first; while (curr != null) { if (curr.value === value) { return true; } curr = curr.next; } return false; } removeValue(value) { let curr = this.first; while (curr != null) { if (curr.value === value) { this.remove(curr); return; } curr = curr.next; } } remove(node) { if (this._first == node) { this._first = node.next; if (node.next != null) { node.next.prev = null; } } if (this._last == node) { this._last = node.prev; if (node.prev != null) { node.prev.next = null; } } if (node.prev != null) { node.prev.next = node.next; } if (node.next != null) { node.next.prev = node.prev; } node.next = null; node.prev = null; } } export class LinkedListNode { get value() { return this._value; } set value(value) { this._value = value; } get prev() { return this._prev; } set prev(value) { this._prev = value; } get next() { return this._next; } set next(value) { this._next = value; } constructor(item) { if (item !== undefined) { this.value = item; } } }