1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const lower_bound_1 = require("./lower-bound");
|
4 | class 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 | }
|
37 | exports.default = PriorityQueue;
|