Library
Module
Module type
Parameter
Class
Class type
Make(K)(P)
is the priority search queue with bindings K.t -> P.t
.
val empty : t
empty
is the search queue that contains no bindings.
val size : t -> int
size t
is the number of distinct bindings in t
.
k
find k t
is Some p
if t
contains the binding k -> p
, or None
otherwise.
add k p t
is t
with the binding k -> p
. If k
is already bound in t
, that binding is replaced.
adjust f k t
is t
with the binding k -> p
replaced by k -> f p
. When k
is not bound in t
, the result is t
.
p
min t
is the binding Some (k, p)
where p
is minimal in t
, or None
if t
is empty
.
Note that min t
is actually the smallest (p, k)
in t
— when multiple bindings share p
, min t
is the one with the smallest k
.
fold_at_most p0 f z q
folds f
over bindings k -> p
where p
is not larger than p0
, in key-ascending order.
iter_at_most p0 f q
applies f
to the bindings k -> p
where p
is not larger than p0
, in key-ascending order.
iter_at_most p0 f q
is the sequence of bindings k -> p
where p
not larger than p0
, in key-ascending order.
fold f z t
is f k0 p0 (f k1 p1 ... (f kn pn z))
. Bindings are folded over in key-ascending order.
filter p t
is the search queue with exactly the bindings in t
which satisfy the predicate p
.
partition p t
splits t
into (t1, t2)
, where t1
contains the bindings in t
which satisfy the predicate p
, and t2
contains those that don't.
iter f t
applies f
to all bindings in t
in key-ascending order.
of_list kps
is t
with bindings kps
. When there are multiple bindings for a given k
, it is unspecified which one is chosen.
of_sorted_list kps
is t
with bindings kps
. This operation is generally faster than of_list
. kps
must contain the bindings in key-ascending order without repetitions. When this is not the case, the result is undefined.
to_seq t
iterates over all bindings in t
in key-ascending order.
of_seq kps
builds t
from bindings kps
. When there are multiple bindings for a given k
, it is unspecified which one is chosen.