perf: optimize task(s) stealing
[poolifier.git] / src / priority-queue.ts
index 3c26ff35208b6f0ef599158ff6d446f47a1e8123..1c0d8c929967b2fa52f728f7b395ed013f044fda 100644 (file)
@@ -26,10 +26,17 @@ export class PriorityQueue<T> {
   /** The maximum size of the priority queue. */
   public maxSize!: number
 
+  /**
+   * The number of filled prioritized buckets.
+   */
+  public get buckets (): number {
+    return this.k === Infinity ? 1 : Math.trunc(this.nodeArray.length / this.k)
+  }
+
   /**
    * Constructs a priority queue.
    *
-   * @param k - Prioritized bucket size.
+   * @param k - Prioritized bucket size. @defaultValue Infinity
    */
   public constructor (k = Infinity) {
     if (k !== Infinity && !Number.isSafeInteger(k)) {
@@ -51,10 +58,7 @@ export class PriorityQueue<T> {
    */
   public enqueue (data: T, priority?: number): number {
     priority = priority ?? 0
-    const startIndex =
-      this.k === Infinity || this.nodeArray.length / this.k < 1
-        ? 0
-        : Math.trunc(this.nodeArray.length / this.k) * this.k
+    const startIndex = this.k === Infinity ? 0 : this.buckets * this.k
     let inserted = false
     for (let index = startIndex; index < this.nodeArray.length; index++) {
       if (this.nodeArray[index].priority > priority) {
@@ -121,7 +125,7 @@ export class PriorityQueue<T> {
   /**
    * Returns an iterator for the priority queue.
    *
-   * @returns An iterator for the deque.
+   * @returns An iterator for the priority queue.
    * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
    */
   [Symbol.iterator] (): Iterator<T> {