/**
* Fixed priority queue node.
- *
* @typeParam T - Type of priority queue node data.
* @internal
*/
/**
* Fixed priority queue.
- *
* @typeParam T - Type of fixed priority queue data.
* @internal
*/
export class FixedPriorityQueue<T> {
private start!: number
- private readonly nodeArray: Array<FixedPriorityQueueNode<T>>
+ private readonly nodeArray: FixedPriorityQueueNode<T>[]
/** The fixed priority queue capacity. */
public readonly capacity: number
/** The fixed priority queue size. */
/**
* Constructs a fixed priority queue.
- *
* @param size - Fixed priority queue size. @defaultValue defaultQueueSize
* @param enablePriority - Whether to enable priority. @defaultValue false
* @returns FixedPriorityQueue.
/**
* Checks if the fixed priority queue is empty.
- *
* @returns `true` if the fixed priority queue is empty, `false` otherwise.
*/
public empty (): boolean {
/**
* Checks if the fixed priority queue is full.
- *
* @returns `true` if the fixed priority queue is full, `false` otherwise.
*/
public full (): boolean {
/**
* Enqueue data into the fixed priority queue.
- *
* @param data - Data to enqueue.
* @param priority - Priority of the data. Lower values have higher priority.
* @returns The new size of the priority queue.
for (let i = 0; i < this.size; i++) {
if (this.nodeArray[index].priority > priority) {
this.nodeArray.splice(index, 0, { data, priority })
- this.nodeArray.length !== this.capacity &&
- (this.nodeArray.length = this.capacity)
+ this.nodeArray.length = this.capacity
inserted = true
break
}
/**
* Gets data from the fixed priority queue.
- *
* @param index - The index of the data to get.
* @returns The data at the index or `undefined` if the fixed priority queue is empty or the index is out of bounds.
*/
/**
* Dequeue data from the fixed priority queue.
- *
* @returns The dequeued data or `undefined` if the priority queue is empty.
*/
public dequeue (): T | undefined {
/**
* Returns an iterator for the fixed priority queue.
- *
* @returns An iterator for the fixed priority queue.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
*/
if (i >= this.size) {
return {
value: undefined,
- done: true
+ done: true,
}
}
const value = this.nodeArray[index].data
}
return {
value,
- done: false
+ done: false,
}
- }
+ },
}
}
/**
* Checks the queue size.
- *
* @param size - Queue size.
*/
private checkSize (size: number): void {
if (!Number.isSafeInteger(size)) {
throw new TypeError(
- `Invalid fixed priority queue size: '${size}' is not an integer`
+ `Invalid fixed priority queue size: '${size.toString()}' is not an integer`
)
}
if (size < 0) {
- throw new RangeError(`Invalid fixed priority queue size: ${size} < 0`)
+ throw new RangeError(
+ `Invalid fixed priority queue size: ${size.toString()} < 0`
+ )
}
}
}