UNPKG

@technobuddha/library

Version:
86 lines 3.95 kB
/** * A simple priority queue * @group Utility * @category Classes */ export class PriorityQueue { comparator; /** * Creates a new PriorityQueue. * * @param comparator - Function to compare two elements and puts them in priority order. Takes two elements as arguments and returns a number greater, less * then or equal to zero. * @param contents - Initial contents of the queue */ constructor(comparator, contents) { this.comparator = comparator; this.contents = Array.from(contents ?? []); this.sorted = false; } contents; sorted; sort() { this.contents.sort(this.comparator); this.sorted = true; } /** * Add an element to the queue * @param o - element to be added */ push(...o) { this.contents.push(...o); this.sorted = false; } /** * Return and remove the highest priority item from the queue * * @returns queue element */ pop() { if (!this.sorted) { this.sort(); } return this.contents.shift(); } /** * Iterate through all elements in the queue * * @returns generator function */ *[Symbol.iterator]() { if (!this.sorted) { this.sort(); } yield* this.contents; } /** * Determine the number of items in the queue * * @returns number of element in the queue */ get size() { return this.contents.length; } /** * Transform all elements in the queue * * @param f - Function to transform each element of the queue * @returns array of transformed queue elements */ map(f) { if (!this.sorted) { this.sort(); } return this.contents.map(f); } /** * Change the function used to order the queue * * @param newComparator - function to compare elements of the queue */ reorder(newComparator) { this.comparator = newComparator; this.sorted = false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpb3JpdHktcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJpb3JpdHktcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBU2Q7SUFSVjs7Ozs7O09BTUc7SUFDSCxZQUNVLFVBQWtDLEVBQzFDLFFBQXNCO1FBRGQsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFHMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRWdCLFFBQVEsQ0FBTTtJQUN2QixNQUFNLENBQVU7SUFFaEIsSUFBSTtRQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBTTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksR0FBRztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEdBQUcsQ0FBSSxDQUE2QztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLGFBQXFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9