refactor: move queueing code into its own directory
[poolifier.git] / src / queues / queue-types.ts
1 /**
2 * Default queue size.
3 * @internal
4 */
5 export const defaultQueueSize = 2048
6
7 /**
8 * Fixed queue node.
9 * @typeParam T - Type of fixed queue node data.
10 * @internal
11 */
12 export interface FixedQueueNode<T> {
13 data: T
14 priority: number
15 }
16
17 /**
18 * Fixed queue.
19 * @typeParam T - Type of fixed queue data.
20 * @internal
21 */
22 export interface IFixedQueue<T> {
23 /** The fixed queue capacity. */
24 readonly capacity: number
25 /** The fixed queue size. */
26 readonly size: number
27 /** The fixed queue node array. */
28 nodeArray: FixedQueueNode<T>[]
29 /**
30 * Checks if the fixed queue is empty.
31 * @returns `true` if the fixed queue is empty, `false` otherwise.
32 */
33 empty: () => boolean
34 /**
35 * Checks if the fixed queue is full.
36 * @returns `true` if the fixed queue is full, `false` otherwise.
37 */
38 full: () => boolean
39 /**
40 * Enqueue data into the fixed queue.
41 * @param data - Data to enqueue.
42 * @param priority - Priority of the data. Lower values have higher priority.
43 * @returns The new size of the fixed queue.
44 * @throws If the fixed queue is full.
45 */
46 enqueue: (data: T, priority?: number) => number
47 /**
48 * Gets data from the fixed queue.
49 * @param index - The index of the data to get.
50 * @returns The data at the index or `undefined` if the fixed queue is empty or the index is out of bounds.
51 */
52 get: (index: number) => T | undefined
53 /**
54 * Dequeue data from the fixed queue.
55 * @returns The dequeued data or `undefined` if the fixed queue is empty.
56 */
57 dequeue: () => T | undefined
58 /**
59 * Clears the fixed queue.
60 */
61 clear: () => void
62 /**
63 * Returns an iterator for the fixed queue.
64 * @returns An iterator for the fixed queue.
65 * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
66 */
67 [Symbol.iterator]: () => Iterator<T>
68 }
69
70 /**
71 * Default bucket size.
72 * @internal
73 */
74 export const defaultBucketSize = 2048
75
76 /**
77 * Priority queue node.
78 * @typeParam T - Type of priority queue node data.
79 * @internal
80 */
81 export interface PriorityQueueNode<T> extends IFixedQueue<T> {
82 next?: IFixedQueue<T>
83 }