@shockpkg/dir-projector
Version:
Package for creating Shockwave Director projectors
107 lines (83 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Queue = void 0;
/**
* A simple queue with optional priority.
*/
class Queue extends Object {
/**
* Queue data.
*/
constructor() {
super();
this._queue_ = [];
}
/**
* Get size of queue.
*
* @returns Total callbacks in queue.
*/
get size() {
return this._queue_.length;
}
/**
* Clear queue.
*/
clear() {
this._queue_ = [];
}
/**
* Enqueue callback.
*
* @param handler Callback function.
* @param priority Callback priority.
*/
push(handler, priority = 0) {
const queue = this._queue_;
let index = 0;
for (let i = queue.length; i--;) {
if (queue[i].priority < priority) {
index = i + 1;
break;
}
}
queue.splice(index, 0, {
priority,
handler
});
}
/**
* Pop callback off queue.
*
* @returns Callback function or null if empty.
*/
pop() {
const entry = this._queue_.pop();
return entry ? entry.handler : null;
}
/**
* Shift callback off queue.
*
* @returns Callback function or null if empty.
*/
shift() {
const entry = this._queue_.shift();
return entry ? entry.handler : null;
}
/**
* Run queue.
*/
async run() {
for (;;) {
const entry = this.pop();
if (!entry) {
break;
} // eslint-disable-next-line no-await-in-loop
await entry();
}
}
}
exports.Queue = Queue;
//# sourceMappingURL=queue.js.map