"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Queue; /** @license MIT License (c) copyright 2010-2016 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ // Based on https://github.com/petkaantonov/deque 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; } }