@trap_stevo/legendarybuilderpronodejs-utilities
Version:
The legendary computational utility API that makes your application a legendary application. ~ Created by Steven Compton
115 lines (80 loc) • 2.07 kB
JavaScript
const EventEmitter = require("events");
class Queue extends EventEmitter
{
constructor()
{
super();
this.queue = [];
}
add(data)
{
this.queue.push(data);
this.emit("itemAdded", data, this.size());
}
current()
{
if (this.empty())
{
return null;
}
const currentItem = this.queue.shift();
const nextItem = this.peek();
this.emit("itemProcessed", currentItem, this.size());
if (nextItem)
{
this.emit("processingItem", nextItem, this.size());
}
return currentItem;
}
peek()
{
if (this.empty())
{
return null;
}
return this.queue[0];
}
get(index)
{
if (index < 0 || index >= this.queue.length)
{
return null;
}
return this.queue[index];
}
findBy(predicate)
{
return this.queue.find(predicate) || null;
}
empty()
{
return this.queue.length === 0;
}
size()
{
return this.queue.length;
}
clear()
{
this.queue = [];
this.emit("queueCleared", this.queue);
}
toArray()
{
return [...this.queue];
}
contains(item)
{
return this.queue.includes(item);
}
remove(item)
{
const index = this.queue.indexOf(item);
if (index !== -1)
{
const removedItem = this.queue.splice(index, 1)[0];
this.emit("itemRemoved", removedItem, this.size());
}
}
};
module.exports = Queue;