UNPKG

@zkochan/pnpm

Version:

Fast, disk space efficient package manager

75 lines (66 loc) 1.57 kB
/** @license MIT License (c) copyright 2010-2016 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ /** * Doubly linked list * @constructor */ export default 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) }