X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpriority-queue.ts;h=e68fe37d16e732efc907562adbb9716b9793c612;hb=13433f995078fad09dbe8efe59fe614de82a05e4;hp=64b5a9248a804130107b810c412bf4c978ae8cd9;hpb=c99df098ff02de4aeb34a422f2ab7c525e7c37ae;p=poolifier.git diff --git a/src/priority-queue.ts b/src/priority-queue.ts index 64b5a924..e68fe37d 100644 --- a/src/priority-queue.ts +++ b/src/priority-queue.ts @@ -26,6 +26,13 @@ export class PriorityQueue { /** 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. * @@ -51,10 +58,7 @@ export class PriorityQueue { */ 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) { @@ -87,9 +91,7 @@ export class PriorityQueue { --bucket } } - if (this.size > 0) { - --this.size - } + this.decrementSize() return this.nodeArray.shift()?.data } @@ -156,4 +158,16 @@ export class PriorityQueue { } return this.size } + + /** + * Decrements the size of the priority queue. + * + * @returns The new size of the priority queue. + */ + private decrementSize (): number { + if (this.size > 0) { + --this.size + } + return this.size + } }