Plato on Github
Report Home
node_modules/when/lib/Queue.js
Maintainability
67.45
Lines of code
66
Difficulty
62.43
Estimated Errors
0.54
Function weight
By Complexity
By SLOC
/** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ (function(define) { 'use strict'; define(function() { /** * Circular queue * @param {number} capacityPow2 power of 2 to which this queue's capacity * will be set initially. eg when capacityPow2 == 3, queue capacity * will be 8. * @constructor */ function Queue(capacityPow2) { this.head = this.tail = this.length = 0; this.buffer = new Array(1 << capacityPow2); } Queue.prototype.push = function(x) { if(this.length === this.buffer.length) { this._ensureCapacity(this.length * 2); } this.buffer[this.tail] = x; this.tail = (this.tail + 1) & (this.buffer.length - 1); ++this.length; return this.length; }; Queue.prototype.shift = function() { var x = this.buffer[this.head]; this.buffer[this.head] = void 0; this.head = (this.head + 1) & (this.buffer.length - 1); --this.length; return x; }; Queue.prototype._ensureCapacity = function(capacity) { var head = this.head; var buffer = this.buffer; var newBuffer = new Array(capacity); var i = 0; var len; if(head === 0) { len = this.length; for(; i<len; ++i) { newBuffer[i] = buffer[i]; } } else { capacity = buffer.length; len = this.tail; for(; head<capacity; ++i, ++head) { newBuffer[i] = buffer[head]; } for(head=0; head<len; ++i, ++head) { newBuffer[i] = buffer[head]; } } this.buffer = newBuffer; this.head = 0; this.tail = this.length; }; return Queue; }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));