X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fdeque.ts;h=9be270ffa8d6f2e95f1d045b07459d595576d30a;hb=dc021bcca72f8b4d185d96a301579612fba2793b;hp=109304a83e2de9ac4470b121817fde9f0803f630;hpb=5e7eca0e665958972066bf77efece90345fe73d4;p=poolifier.git diff --git a/src/deque.ts b/src/deque.ts index 109304a8..9be270ff 100644 --- a/src/deque.ts +++ b/src/deque.ts @@ -1,6 +1,9 @@ // Copyright Jerome Benoit. 2023. All Rights Reserved. -class Node { +/** + * @internal + */ +export class Node { public value: T public next?: Node public prev?: Node @@ -15,6 +18,7 @@ class Node { * Implemented with a doubly linked list. * * @typeParam T - Type of deque values. + * @internal */ export class Deque { private head?: Node @@ -154,6 +158,36 @@ export class Deque { } } + /** + * 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 { + return { + [Symbol.iterator]: (): Iterator => { + 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 + return ret + } + } + } + } + } + private incrementSize (): number { ++this.size if (this.size > this.maxSize) {