class Queue { // initializes the queue constructor() { this.arr = []; this.pos = 0; } // uses the array x to fill the queue makeFilled(x) { this.arr = x; this.pos = 0; } // Returns true if the queue is empty, and false otherwise. isEmpty() { return (this.arr.length == 0 || this.pos == (this.arr.length - 1)); } getPos() { return this.pos; } // Enqueues x in the queue (to the end) enqueue(x) { this.arr.push(x); } // enqueues x to position i insert(x, i) { this.arr.splice(i, 0, x); } // removes item at index i remove(i) { this.arr.splice(i, 1); } // Dequeues an item and returns it. If the queue is empty, throws an error dequeue() { // if the queue is empty, throw if (this.arr.length == 0) { throw "Queue empty!"; } // if the queue is at the end already, return undefined if (this.pos >= this.arr.length) { return undefined; } // store the item at the front of the queue var item = this.arr[this.pos]; ++this.pos; // 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. peek() { return (this.arr.length > 0 ? this.arr[this.pos] : undefined); } // returns an array of all items in the queue (again, without dequeuing) from the current pos. read() { return this.arr.slice(this.pos); } // Deletes all the data, resets to as on construction reset() { this.arr = []; this.pos = 0; } } module.exports = QueueButBad;