UNPKG

@0xc/queue

Version:

Basic queue implementation in TypeScript with generics support

65 lines (64 loc) 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Queue = void 0; class Queue { constructor(...elements) { this.queueMap = new Map(); this.startIndex = 0; this.endIndex = 0; this.enqueue(...elements); } enqueue(...elements) { for (let i = 0; i < elements.length; i++) { this.queueMap.set(this.endIndex++, elements[i]); } } dequeue() { let value = undefined; if (this.size > 0) { value = this._peek(); this._deleteFirst(); } return value; } _deleteFirst() { this.queueMap.delete(this.startIndex++); } get size() { return this.queueMap.size; } peek() { let value = undefined; if (this.size > 0) { value = this._peek(); } return value; } _peek() { return this.queueMap.get(this.startIndex); } toString() { return [...this].toString(); } toLocaleString() { return [...this].toLocaleString(); } [Symbol.iterator]() { const values = []; for (let si = this.startIndex; si < this.endIndex; si++) { values.push(this.queueMap.get(si)); } let index = 0; return { next: () => { if (index < values.length) { return { value: values[index++], done: false }; } else { return { value: null, done: true }; } } }; } } exports.Queue = Queue;