igniteui-webcomponents-datasources
Version:
Reference custom data providers for the Ignite UI Web Components data source.
117 lines (116 loc) • 2.79 kB
JavaScript
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;
}
}
}