aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jest-worker/build/PriorityQueue.js
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
committerJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
commit5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch)
tree360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/jest-worker/build/PriorityQueue.js
parentb500a50f1b97d93c98b36ed9a980f8188d648147 (diff)
downloadLYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz
LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/jest-worker/build/PriorityQueue.js')
-rw-r--r--node_modules/jest-worker/build/PriorityQueue.js188
1 files changed, 188 insertions, 0 deletions
diff --git a/node_modules/jest-worker/build/PriorityQueue.js b/node_modules/jest-worker/build/PriorityQueue.js
new file mode 100644
index 0000000..6a55b59
--- /dev/null
+++ b/node_modules/jest-worker/build/PriorityQueue.js
@@ -0,0 +1,188 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * Priority queue that processes tasks in natural ordering (lower priority first)
+ * accoridng to the priority computed by the function passed in the constructor.
+ *
+ * FIFO ordering isn't guaranteed for tasks with the same priority.
+ *
+ * Worker specific tasks with the same priority as a non-worker specific task
+ * are always processed first.
+ */
+class PriorityQueue {
+ constructor(_computePriority) {
+ _defineProperty(this, '_queue', []);
+
+ _defineProperty(this, '_sharedQueue', new MinHeap());
+
+ this._computePriority = _computePriority;
+ }
+
+ enqueue(task, workerId) {
+ if (workerId == null) {
+ this._enqueue(task, this._sharedQueue);
+ } else {
+ const queue = this._getWorkerQueue(workerId);
+
+ this._enqueue(task, queue);
+ }
+ }
+
+ _enqueue(task, queue) {
+ const item = {
+ priority: this._computePriority(task.request[2], ...task.request[3]),
+ task
+ };
+ queue.add(item);
+ }
+
+ dequeue(workerId) {
+ const workerQueue = this._getWorkerQueue(workerId);
+
+ const workerTop = workerQueue.peek();
+
+ const sharedTop = this._sharedQueue.peek(); // use the task from the worker queue if there's no task in the shared queue
+ // or if the priority of the worker queue is smaller or equal to the
+ // priority of the top task in the shared queue. The tasks of the
+ // worker specific queue are preferred because no other worker can pick this
+ // specific task up.
+
+ if (
+ sharedTop == null ||
+ (workerTop != null && workerTop.priority <= sharedTop.priority)
+ ) {
+ var _workerQueue$poll$tas, _workerQueue$poll;
+
+ return (_workerQueue$poll$tas =
+ (_workerQueue$poll = workerQueue.poll()) === null ||
+ _workerQueue$poll === void 0
+ ? void 0
+ : _workerQueue$poll.task) !== null && _workerQueue$poll$tas !== void 0
+ ? _workerQueue$poll$tas
+ : null;
+ }
+
+ return this._sharedQueue.poll().task;
+ }
+
+ _getWorkerQueue(workerId) {
+ let queue = this._queue[workerId];
+
+ if (queue == null) {
+ queue = this._queue[workerId] = new MinHeap();
+ }
+
+ return queue;
+ }
+}
+
+exports.default = PriorityQueue;
+
+class MinHeap {
+ constructor() {
+ _defineProperty(this, '_heap', []);
+ }
+
+ peek() {
+ var _this$_heap$;
+
+ return (_this$_heap$ = this._heap[0]) !== null && _this$_heap$ !== void 0
+ ? _this$_heap$
+ : null;
+ }
+
+ add(item) {
+ const nodes = this._heap;
+ nodes.push(item);
+
+ if (nodes.length === 1) {
+ return;
+ }
+
+ let currentIndex = nodes.length - 1; // Bubble up the added node as long as the parent is bigger
+
+ while (currentIndex > 0) {
+ const parentIndex = Math.floor((currentIndex + 1) / 2) - 1;
+ const parent = nodes[parentIndex];
+
+ if (parent.priority <= item.priority) {
+ break;
+ }
+
+ nodes[currentIndex] = parent;
+ nodes[parentIndex] = item;
+ currentIndex = parentIndex;
+ }
+ }
+
+ poll() {
+ const nodes = this._heap;
+ const result = nodes[0];
+ const lastElement = nodes.pop(); // heap was empty or removed the last element
+
+ if (result == null || nodes.length === 0) {
+ return result !== null && result !== void 0 ? result : null;
+ }
+
+ let index = 0;
+ nodes[0] =
+ lastElement !== null && lastElement !== void 0 ? lastElement : null;
+ const element = nodes[0];
+
+ while (true) {
+ let swapIndex = null;
+ const rightChildIndex = (index + 1) * 2;
+ const leftChildIndex = rightChildIndex - 1;
+ const rightChild = nodes[rightChildIndex];
+ const leftChild = nodes[leftChildIndex]; // if the left child is smaller, swap with the left
+
+ if (leftChild != null && leftChild.priority < element.priority) {
+ swapIndex = leftChildIndex;
+ } // If the right child is smaller or the right child is smaller than the left
+ // then swap with the right child
+
+ if (
+ rightChild != null &&
+ rightChild.priority < (swapIndex == null ? element : leftChild).priority
+ ) {
+ swapIndex = rightChildIndex;
+ }
+
+ if (swapIndex == null) {
+ break;
+ }
+
+ nodes[index] = nodes[swapIndex];
+ nodes[swapIndex] = element;
+ index = swapIndex;
+ }
+
+ return result;
+ }
+}