build(deps-dev): bump @types/node
[poolifier.git] / src / deque.ts
index 109304a83e2de9ac4470b121817fde9f0803f630..9be270ffa8d6f2e95f1d045b07459d595576d30a 100644 (file)
@@ -1,6 +1,9 @@
 // Copyright Jerome Benoit. 2023. All Rights Reserved.
 
-class Node<T> {
+/**
+ * @internal
+ */
+export class Node<T> {
   public value: T
   public next?: Node<T>
   public prev?: Node<T>
@@ -15,6 +18,7 @@ class Node<T> {
  * Implemented with a doubly linked list.
  *
  * @typeParam T - Type of deque values.
+ * @internal
  */
 export class Deque<T> {
   private head?: Node<T>
@@ -154,6 +158,36 @@ export class Deque<T> {
     }
   }
 
+  /**
+   * Returns an backward iterator for the deque.
+   *
+   * @returns An backward iterator for the deque.
+   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
+   */
+  backward (): Iterable<T> {
+    return {
+      [Symbol.iterator]: (): Iterator<T> => {
+        let node = this.tail
+        return {
+          next: () => {
+            if (node == null) {
+              return {
+                value: undefined,
+                done: true
+              }
+            }
+            const ret = {
+              value: node.value,
+              done: false
+            }
+            node = node.prev as Node<T>
+            return ret
+          }
+        }
+      }
+    }
+  }
+
   private incrementSize (): number {
     ++this.size
     if (this.size > this.maxSize) {