UNPKG

@empathyco/x-components

Version:
62 lines 1.93 kB
import type { Dictionary } from '@empathyco/x-utils'; /** * An object containing a key, a priority number and a data. * * @public */ export interface XPriorityQueueNode<SomeRecord extends Dictionary, SomeData extends Dictionary = Dictionary> { /** * The key to store the element in the queue. * * @public */ key: keyof SomeRecord; /** * The number used to sort the elements in the queue. * * @public */ priority: number; /** * The extra data to store in the queue associated with a key and priority pair. * * @public */ data: SomeData; } /** * Data structure to store a list of entries ordered by their priority. * * @public */ export interface XPriorityQueue<SomeRecord extends Dictionary, SomeData extends Dictionary> { /** * Inserts an element into the queue in the correct position based on its priority. * * @param key - The key of the element to insert. * @param priority - The priority of the element to insert. This will determine its position * in the queue. * @param data - Extra data related to the inserted key. */ push: (key: keyof SomeRecord, priority: number, data?: SomeData) => void; /** * Retrieves and removes the head {@link XPriorityQueueNode | node} of the queue. * * @returns The head {@link XPriorityQueueNode | node} of the {@link XPriorityQueue | queue} or * undefined if the queue is empty. */ pop: () => XPriorityQueueNode<SomeRecord, SomeData> | undefined; /** * Retrieves the number of elements stored in the queue. * * @returns The number of elements in the queue. */ size: () => number; } /** * Alias type representing a comparator function between two numbers. * * @public */ export type NumberComparatorFn = (a: number, b: number) => boolean; //# sourceMappingURL=x-priority-queue.types.d.ts.map