This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/fablabchemnitz/papercraft/openjscad/node_modules/most/lib/LinkedList.js

81 lines
1.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = LinkedList;
/** @license MIT License (c) copyright 2010-2016 original author or authors */
/** @author Brian Cavalier */
/** @author John Hann */
/**
* Doubly linked list
* @constructor
*/
function LinkedList() {
this.head = null;
this.length = 0;
}
/**
* Add a node to the end of the list
* @param {{prev:Object|null, next:Object|null, dispose:function}} x node to add
*/
LinkedList.prototype.add = function (x) {
if (this.head !== null) {
this.head.prev = x;
x.next = this.head;
}
this.head = x;
++this.length;
};
/**
* Remove the provided node from the list
* @param {{prev:Object|null, next:Object|null, dispose:function}} x node to remove
*/
LinkedList.prototype.remove = function (x) {
// eslint-disable-line complexity
--this.length;
if (x === this.head) {
this.head = this.head.next;
}
if (x.next !== null) {
x.next.prev = x.prev;
x.next = null;
}
if (x.prev !== null) {
x.prev.next = x.next;
x.prev = null;
}
};
/**
* @returns {boolean} true iff there are no nodes in the list
*/
LinkedList.prototype.isEmpty = function () {
return this.length === 0;
};
/**
* Dispose all nodes
* @returns {Promise} promise that fulfills when all nodes have been disposed,
* or rejects if an error occurs while disposing
*/
LinkedList.prototype.dispose = function () {
if (this.isEmpty()) {
return Promise.resolve();
}
var promises = [];
var x = this.head;
this.head = null;
this.length = 0;
while (x !== null) {
promises.push(x.dispose());
x = x.next;
}
return Promise.all(promises);
};