sb-element
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1. It is a component library constructed around the SCSS library [Sb-Theming](https://github.com/SeverinBuchser/SbTheming) and supports [Angular Schematics]
109 lines • 10.5 kB
JavaScript
import { NullListItem } from "./list-item";
export class LinkedList {
constructor(valueOrValues) {
this._start = new NullListItem();
this._end = new NullListItem();
this.current = this._start;
this._length = 0;
this._start.insertNext(this._end);
if (valueOrValues) {
if (Array.isArray(valueOrValues)) {
this.append(valueOrValues);
}
else {
this.append(valueOrValues);
}
}
}
get start() { return this._start; }
;
get first() {
if (this._start.next) {
return this._start.next;
}
return new NullListItem();
}
;
get end() { return this._end; }
;
get last() {
if (this._end.previous) {
return this._end.previous;
}
return new NullListItem();
}
;
get length() { return this._length; }
;
append(valueOrValues) {
if (Array.isArray(valueOrValues)) {
valueOrValues.forEach((value) => this.appendValue(value));
}
else {
this.appendValue(valueOrValues);
}
}
appendValue(value) {
this._end.insertPrevious(value);
this._length++;
}
getItem(index) {
if (index < 0 || index >= this._length) {
throw new RangeError(`Index ${index} is out of bounds!`);
}
let current = this._start;
for (let i = 0; i < index + 1; i++) {
if (current.next) {
current = current.next;
}
}
return current;
}
getValue(index) {
return this.getItem(index).value;
}
indexOf(finder) {
let index = 0;
for (let value of this) {
if (finder(value)) {
return index;
}
;
index++;
}
return -1;
}
find(finder) {
for (let value of this) {
if (finder(value)) {
return value;
}
;
}
return undefined;
}
isStart(item) {
return this._start == item;
}
isEnd(item) {
return this._end == item;
}
[Symbol.iterator]() {
return this;
}
next() {
if (this.current.next) {
this.current = this.current.next;
}
let result = {
done: false,
value: this.current.value
};
if (this.current == this._end) {
this.current = this._start;
return { done: true, value: undefined };
}
return result;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VkLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zYi1lbGVtZW50L3NyYy9saWIvbW9kZWxzL2xpbmtlZC1saXN0L2xpbmtlZC1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsTUFBTSxPQUFPLFVBQVU7SUFvQnJCLFlBQVksYUFBNEI7UUFuQmhDLFdBQU0sR0FBZ0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU16QyxTQUFJLEdBQWdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFPdkMsWUFBTyxHQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25DLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFNMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUM1QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDO0lBM0JELElBQUksS0FBSyxLQUFpQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO0lBQUEsQ0FBQztJQUMvQyxJQUFJLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ2hELE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQUEsQ0FBQztJQUVGLElBQUksR0FBRyxLQUFpQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDO0lB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QUMsS0FBSztTQUMxQixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNCLE9BQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsQ0FBQztTQUN2QztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpc3RJdGVtLCBOdWxsTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcblxuZXhwb3J0IGNsYXNzIExpbmtlZExpc3Q8VD4gaW1wbGVtZW50cyBJdGVyYWJsZTxUPiwgSXRlcmF0b3I8VD4ge1xuICBwcml2YXRlIF9zdGFydDogTGlzdEl0ZW08VD4gPSBuZXcgTnVsbExpc3RJdGVtKCk7XG4gIGdldCBzdGFydCgpOiBMaXN0SXRlbTxUPiB7cmV0dXJuIHRoaXMuX3N0YXJ0O307XG4gIGdldCBmaXJzdCgpOiBMaXN0SXRlbTxUPiB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0Lm5leHQpIHtyZXR1cm4gdGhpcy5fc3RhcnQubmV4dDt9XG4gICAgcmV0dXJuIG5ldyBOdWxsTGlzdEl0ZW0oKTtcbiAgfTtcbiAgcHJpdmF0ZSBfZW5kOiBMaXN0SXRlbTxUPiA9IG5ldyBOdWxsTGlzdEl0ZW0oKTtcbiAgZ2V0IGVuZCgpOiBMaXN0SXRlbTxUPiB7cmV0dXJuIHRoaXMuX2VuZDt9O1xuICBnZXQgbGFzdCgpOiBMaXN0SXRlbTxUPiB7XG4gICAgaWYgKHRoaXMuX2VuZC5wcmV2aW91cykge3JldHVybiB0aGlzLl9lbmQucHJldmlvdXM7fVxuICAgIHJldHVybiBuZXcgTnVsbExpc3RJdGVtKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjdXJyZW50OiBMaXN0SXRlbTxUPiA9IHRoaXMuX3N0YXJ0O1xuICBwcml2YXRlIF9sZW5ndGg6IG51bWJlciA9IDA7XG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtyZXR1cm4gdGhpcy5fbGVuZ3RofTtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZXM/OiBBcnJheTxUPik7XG4gIGNvbnN0cnVjdG9yKHZhbHVlPzogVCk7XG4gIGNvbnN0cnVjdG9yKHZhbHVlT3JWYWx1ZXM/OiBUIHwgQXJyYXk8VD4pIHtcbiAgICB0aGlzLl9zdGFydC5pbnNlcnROZXh0KHRoaXMuX2VuZCk7XG4gICAgaWYgKHZhbHVlT3JWYWx1ZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlT3JWYWx1ZXMpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKHZhbHVlT3JWYWx1ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hcHBlbmQodmFsdWVPclZhbHVlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFwcGVuZCh2YWx1ZXM6IEFycmF5PFQ+KTogdm9pZDtcbiAgcHVibGljIGFwcGVuZCh2YWx1ZTogVCk6IHZvaWQ7XG4gIHB1YmxpYyBhcHBlbmQodmFsdWVPclZhbHVlczogVCB8IEFycmF5PFQ+KTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVPclZhbHVlcykpIHtcbiAgICAgIHZhbHVlT3JWYWx1ZXMuZm9yRWFjaCgodmFsdWU6IFQpID0+IHRoaXMuYXBwZW5kVmFsdWUodmFsdWUpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcGVuZFZhbHVlKHZhbHVlT3JWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmQuaW5zZXJ0UHJldmlvdXModmFsdWUpO1xuICAgIHRoaXMuX2xlbmd0aCsrO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW0oaW5kZXg6IG51bWJlcik6IExpc3RJdGVtPFQ+IHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX2xlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEluZGV4ICR7aW5kZXh9IGlzIG91dCBvZiBib3VuZHMhYCk7XG4gICAgfVxuICAgIGxldCBjdXJyZW50ID0gdGhpcy5fc3RhcnQ7XG4gICAgZm9yIChsZXQgaSA9IDAgOyBpIDwgaW5kZXggKyAxIDsgaSsrKSB7XG4gICAgICBpZiAoY3VycmVudC5uZXh0KSB7Y3VycmVudCA9IGN1cnJlbnQubmV4dDt9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKGluZGV4KS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpbmRleE9mKGZpbmRlcjogKHZhbHVlOiBUKSA9PiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmaW5kZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH07XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBwdWJsaWMgZmluZChmaW5kZXI6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmaW5kZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgaXNTdGFydChpdGVtOiBMaXN0SXRlbTxUPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydCA9PSBpdGVtO1xuICB9XG5cbiAgcHVibGljIGlzRW5kKGl0ZW06IExpc3RJdGVtPFQ+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZCA9PSBpdGVtO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmF0b3I8VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxUPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudC5uZXh0KSB7dGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50Lm5leHQ7fVxuXG4gICAgbGV0IHJlc3VsdDogSXRlcmF0b3JSZXN1bHQ8VD4gPSB7XG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB0aGlzLmN1cnJlbnQudmFsdWVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PSB0aGlzLl9lbmQpIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuX3N0YXJ0O1xuICAgICAgcmV0dXJuIHtkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cbiJdfQ==