feat: add tasks stealing algorithm
[poolifier.git] / src / queue.ts
index ead4b6375388398483eda10abaaae50e2c779928..d38296b2808b1bfcb1dd3793eb09c8089df5e4c9 100644 (file)
@@ -1,7 +1,7 @@
-// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
+// Copyright Jerome Benoit. 2022-2023. All Rights Reserved.
 
 /**
- * Queue
+ * Queue.
  *
  * @typeParam T - Type of queue items.
  */
@@ -71,4 +71,32 @@ export class Queue<T> {
     this.size = 0
     this.maxSize = 0
   }
+
+  /**
+   * Returns an iterator for the queue.
+   *
+   * @returns An iterator for the queue.
+   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
+   */
+  [Symbol.iterator] (): Iterator<T> {
+    const items = this.items
+    let i = this.offset
+
+    return {
+      next: () => {
+        if (i >= items.length) {
+          return {
+            value: undefined,
+            done: true
+          }
+        }
+        const value = items[i]
+        ++i
+        return {
+          value,
+          done: false
+        }
+      }
+    }
+  }
 }