crow/col/mut-priority-queue.crow (source)

mut-priority-queue[k, v] record mut

(has non-public fields)

    Mutable priority queue.

    Elements are key-value pairs. Pairs are sorted by key.
    Popping removes the pair with the lowest key.

    If two pairs have the same key, the second pair added will be popped second.

    new[k, v] (k, v) mut-priority-queue(...a (k, v) tuple2 array) k priority

    New priority queue containing the given pairs.

    to[k, v] (k, v) mut-priority-queue(a (k, v) tuple2 array) k priority

    Copies an array to a new priority queue.

    clear[k, v] void(a (k, v) mut-priority-queue) k priority

    Removes all pairs from the queue.

    is-empty[k, v] bool(a (k, v) mut-priority-queue) k priority

    True iff a.size == 0.

    size[k, v] nat64(a (k, v) mut-priority-queue) k priority

    Number of pairs in the queue.
    This is O(n).

    ~=[k, v] void(a (k, v) mut-priority-queue, anonymous (k, v) tuple2) k priority

    Adds a pair to the queue.
    This is O(log n).

    pop[k, v] (k, v) tuple2?(a (k, v) mut-priority-queue) k priority

    Removes and returns the pair with the lowest key.

    Returns an empty option iff the queue was empty (before calling pop).

    This is amortized O(log n).

    pop-if[k, v] (k, v) tuple2?(a (k, v) mut-priority-queue, f mut bool((k, v) tuple2)) k priority

    pop-value[k, v] v?(a (k, v) mut-priority-queue) k priority

    Like pop, but discards the key.

    copy[k, v] (k, v) mut-priority-queue(a (k, v) mut-priority-queue) k priority

    Copy pairs to a new priority queue.
    This is O(n).

    to[k, v] (k, v) tuple2 array(a (k, v) mut-priority-queue) k priority

    mut-priority-queue-builder[k, v] record mut

    (has non-public fields)

      build[k, v] (k, v) mut-priority-queue(a build-options, f mut void((k, v) mut-priority-queue-builder)) k priority

      ~=[k, v] void(a (k, v) mut-priority-queue-builder, value (k, v) tuple2) k priority