UNPKG

1.16 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const lower_bound_1 = require("./lower-bound");
4class PriorityQueue {
5 constructor() {
6 Object.defineProperty(this, "_queue", {
7 enumerable: true,
8 configurable: true,
9 writable: true,
10 value: []
11 });
12 }
13 enqueue(run, options) {
14 options = Object.assign({ priority: 0 }, options);
15 const element = {
16 priority: options.priority,
17 run
18 };
19 if (this.size && this._queue[this.size - 1].priority >= options.priority) {
20 this._queue.push(element);
21 return;
22 }
23 const index = lower_bound_1.default(this._queue, element, (a, b) => b.priority - a.priority);
24 this._queue.splice(index, 0, element);
25 }
26 dequeue() {
27 const item = this._queue.shift();
28 return item && item.run;
29 }
30 filter(options) {
31 return this._queue.filter(element => element.priority === options.priority).map(element => element.run);
32 }
33 get size() {
34 return this._queue.length;
35 }
36}
37exports.default = PriorityQueue;