UNPKG

scalra

Version:

node.js framework to prototype and scale rapidly

99 lines (68 loc) 2.03 kB
/* Queue.js A function to represent a queue Created by Stephen Morley - http://code.stephenmorley.org/ - and released under the terms of the CC0 1.0 Universal legal code: http://creativecommons.org/publicdomain/zero/1.0/legalcode */ /* Creates a new queue. A queue is a first-in-first-out (FIFO) data structure - * items are added to the end of the queue and removed from the front. */ // Create a new queue exports.Queue = function (){ // initialise the queue and offset var queue = []; var offset = 0; /* Returns the length of the queue. */ this.getLength = function (){ // return the length of the queue return (queue.length - offset); }; /* Returns true if the queue is empty, and false otherwise. */ this.isEmpty = function (){ // return whether the queue is empty return (queue.length == 0); }; /* Enqueues the specified item. The parameter is: * * item - the item to enqueue */ this.enqueue = function (item){ // enqueue the item queue.push(item); }; /* Enqueues the specified item to front. The parameter is: * * item - the item to enqueue * (added by syhu: 2012-04-09) */ this.enqueueFront = function (item){ // enqueue the item to front queue.unshift(item); }; /* Dequeues an item and returns it. If the queue is empty then undefined is * returned. */ this.dequeue = function (){ // if the queue is empty, return undefined if (queue.length == 0) return undefined; // store the item at the front of the queue var item = queue[offset]; // increment the offset and remove the free space if necessary if (++ offset * 2 >= queue.length){ queue = queue.slice(offset); offset = 0; } // return the dequeued item return item; }; /* Returns the item at the front of the queue (without dequeuing it). If the * queue is empty then undefined is returned. */ this.peek = function (){ // return the item at the front of the queue return (queue.length > 0 ? queue[offset] : undefined); }; };