UNPKG

@thi.ng/heaps

Version:

Various heap implementations for arbitrary values and with customizable ordering

41 lines 2.06 kB
import type { IClear, ICopy, IEmpty, IInto, ILength, Pair, Predicate, Predicate2 } from "@thi.ng/api"; import type { PriorityQueueOpts } from "./api.js"; import { Heap } from "./heap.js"; /** * Returns a new {@link PriorityQueue} instance, a thin veneer wrapper for a * backing {@link Heap} and exposing a PQ-like API for arbitrary values, with * configurable value equality handling and priority ordering. * * @remarks * * - By default higher priority values mean higher priority. * - Already queued items can be reprioritized or removed. * - The queue head can be inspected via `peek()` and/or `peekPriority()` * without removing it from the queue. * - Multiple items can be added at once via `into()` * - The queue is iterable (in priority order, according to given comparator) */ export declare const defPriorityQueue: <T>(values?: Iterable<Pair<number, T>> | null, opts?: Partial<PriorityQueueOpts<T>>) => PriorityQueue<T>; export declare class PriorityQueue<T> implements Iterable<Pair<number, T>>, IClear, ICopy<PriorityQueue<T>>, IEmpty<PriorityQueue<T>>, IInto<Pair<number, T>, PriorityQueue<T>>, ILength { protected opts: Partial<PriorityQueueOpts<T>>; heap: Heap<Pair<number, T>>; equiv: Predicate2<T>; constructor(values?: Iterable<Pair<number, T>> | null, opts?: Partial<PriorityQueueOpts<T>>); get length(): number; [Symbol.iterator](): Generator<Pair<number, T>, void, unknown>; clear(): void; copy(): PriorityQueue<T>; empty(): PriorityQueue<T>; push(val: T, priority: number): this; pushPop(val: T, priority: number): import("@thi.ng/api").Maybe<Pair<number, T>>; pop(): T | undefined; peek(): T | undefined; peekPriority(): number | undefined; remove(val: T): boolean; find(val: T): Pair<number, T> | undefined; findWith(fn: Predicate<Pair<number, T>>): Pair<number, T> | undefined; has(val: T): boolean; into(values: Iterable<Pair<number, T>>): this; reprioritize(val: T, priority: number): boolean; } //# sourceMappingURL=priority-queue.d.ts.map