X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fqueue.ts;h=dba55f1cc90467ab5d27e55a9b37e9004da983b4;hb=f6bc9f26d8a0246bbee14b2b03d0bcc41b8aeb52;hp=baecaa35b248d98a6cd4d378b444cfe2a4d316f2;hpb=df593701c4bd494b0e99372fdcc3708412799942;p=poolifier.git diff --git a/src/queue.ts b/src/queue.ts index baecaa35..dba55f1c 100644 --- a/src/queue.ts +++ b/src/queue.ts @@ -6,18 +6,15 @@ * @typeParam T - Type of queue items. */ export class Queue { - private items: T[] - private offset: number - public size: number - public maxSize: number + private items!: T[] + private offset!: number + /** The size of the queue. */ + public size!: number + /** The maximum size of the queue. */ + public maxSize!: number public constructor () { - this.items = [] - this.offset = 0 - /** The size of the queue. */ - this.size = 0 - /** The maximum size of the queue. */ - this.maxSize = 0 + this.clear() } /** @@ -54,7 +51,7 @@ export class Queue { } /** - * Peek at the first item. + * Peeks at the first item. * * @returns The first item or `undefined` if the queue is empty. */ @@ -66,7 +63,7 @@ export class Queue { } /** - * Clear the queue. + * Clears the queue. */ public clear (): void { this.items = [] @@ -74,4 +71,32 @@ export class Queue { 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 { + 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 + } + } + } + } }