AlbertHambardzumyan/node-structures

View on GitHub
lib/queue.js

Summary

Maintainability
A
1 hr
Test Coverage
/**
 * Queue
 */

/**
 * Creates an empty Queue.
 *
 * @constructor
 */
function Queue() {
    this._elements = [];
}

/**
 * Returns the size of the queue.
 *
 * @returns {Number} - the size of the queue.
 */
Queue.prototype.size = function () {
    return this._elements.length;
};

/**
 * Tests if this queue is empty.
 *
 * @returns {boolean} - true if and only if this queue contains no items; false otherwise.
 */
Queue.prototype.isEmpty = function () {
    return this.size() === 0;
};

/**
 * Inserts the specified element into this queue.
 *
 * @param element - the element to add
 * @returns {boolean} Returns true
 */
Queue.prototype.add = function (element) {
    return !!this._elements.push(element);
};

/**
 * Retrieves and removes the head of this queue. This method differs from poll only in that it throws an exception
 *  if this queue is empty.
 *
 * @throws {Error} when the queue is empty.
 * @returns {*} Returns the head of this queue
 */
Queue.prototype.remove = function () {
    if (this.isEmpty())
        throw new Error('Queue is empty');

    return this._elements.shift();
};


/**
 * Retrieves and removes the head of this queue, or returns null if this queue is empty.
 *
 * @returns {*} Returns the head of this queue, or null if this queue is empty.
 */
Queue.prototype.poll = function () {
    return !this.isEmpty() ? this._elements.shift() : null;
};

/**
 * Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty.
 *
 * @returns {*} Returns the head of this queue, or null if this queue is empty.
 */
Queue.prototype.peek = function () {
    return !this.isEmpty() ? this._elements[0] : null;
};

module.exports = Queue;