UNPKG

pnpm

Version:

Fast, disk space efficient package manager

63 lines (49 loc) 1.37 kB
/** @license MIT License (c) copyright 2010-2016 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ // Based on https://github.com/petkaantonov/deque export default function Queue (capPow2) { this._capacity = capPow2 || 32 this._length = 0 this._head = 0 } Queue.prototype.push = function (x) { var len = this._length this._checkCapacity(len + 1) var i = (this._head + len) & (this._capacity - 1) this[i] = x this._length = len + 1 } Queue.prototype.shift = function () { var head = this._head var x = this[head] this[head] = void 0 this._head = (head + 1) & (this._capacity - 1) this._length-- return x } Queue.prototype.isEmpty = function () { return this._length === 0 } Queue.prototype.length = function () { return this._length } Queue.prototype._checkCapacity = function (size) { if (this._capacity < size) { this._ensureCapacity(this._capacity << 1) } } Queue.prototype._ensureCapacity = function (capacity) { var oldCapacity = this._capacity this._capacity = capacity var last = this._head + this._length if (last > oldCapacity) { copy(this, 0, this, oldCapacity, last & (oldCapacity - 1)) } } function copy (src, srcIndex, dst, dstIndex, len) { for (var j = 0; j < len; ++j) { dst[j + dstIndex] = src[j + srcIndex] src[j + srcIndex] = void 0 } }