UNPKG

@shockpkg/dir-projector

Version:

Package for creating Shockwave Director projectors

107 lines (83 loc) 1.55 kB
"use strict"; 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