X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpriority-queue.ts;h=2a266d28f6b54bc7c9655de941cb9b5de88a779d;hb=31a42de7d691911759e12a673e5a2153f5558ed8;hp=18478afefbcb0e90c12f300d07305568f8e4a661;hpb=ed20267eeb81ac0fb4a3abb5d1bde586080c2671;p=poolifier.git diff --git a/src/priority-queue.ts b/src/priority-queue.ts index 18478afe..2a266d28 100644 --- a/src/priority-queue.ts +++ b/src/priority-queue.ts @@ -128,29 +128,38 @@ export class PriorityQueue { } ++currentBucket tail = tail.next - tailChanged = true } + tailChanged = tail !== this.tail } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const data = tail!.dequeue() // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - if (tail!.empty() && tail!.next != null) { - if (!tailChanged) { + if (tail!.empty()) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if (!tailChanged && tail!.next != null) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.tail = tail!.next - } else { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + delete tail!.next + } else if (tailChanged) { let node: PriorityQueueNode | undefined = this.tail while (node != null) { - if (node.next === tail) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if (node.next === tail && tail!.next != null) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion node.next = tail!.next + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + delete tail!.next + break + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + } else if (node.next === tail && tail!.next == null) { + delete node.next + this.head = node break } node = node.next } } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - delete tail!.next } return data }