@0xc/queue
Version:
Basic queue implementation in TypeScript with generics support
65 lines (64 loc) • 1.63 kB
JavaScript
"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;