From d668eac4a63a9aa98c3efff395faa23cfcea1c1b Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 21 Mar 2024 17:08:37 +0100 Subject: [node] begin the great typescript rewrite --- nodejs/lib/priority_queue.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 nodejs/lib/priority_queue.ts (limited to 'nodejs/lib/priority_queue.ts') diff --git a/nodejs/lib/priority_queue.ts b/nodejs/lib/priority_queue.ts new file mode 100644 index 0000000..ec9e7d0 --- /dev/null +++ b/nodejs/lib/priority_queue.ts @@ -0,0 +1,36 @@ +class QElement { + element: unknown; + priority: number; + constructor(element: unknown, priority: number) { + this.element = element; + this.priority = priority; + } +} + +export class PriorityQueue { + items: Array; + + constructor(elt?: unknown) { + this.items = []; + if (elt !== undefined) this.enqueue(elt, 0); + } + + enqueue(element: unknown, priority: number): void { + let qElement = new QElement(element, priority); + + for (let i = 0; i < this.items.length; ++i) { + if (this.items[i].priority > qElement.priority) { + this.items.splice(i, 0, qElement); + return; + } + } + this.items.push(qElement); + } + dequeue(): unknown { + // we would use pop to get the highest priority, shift() gives us the lowest priority + return this.items.shift()?.element; + } + isEmpty(): boolean { + return this.items.length === 0; + } +} -- cgit v1.2.3