module Multi_pmap: Extlib.MultiPMap
Polymorphic Multi-Map.
This is a polymorphic multi-map, i.e. an association from 1 to many.
Author(s): Xavier Leroy, Nicolas Cannasse, Markus Mottle, David Teller
type ('a, 'b)
t
val empty : ('a, 'b) t
compare
as key comparison function.val is_empty : ('a, 'b) t -> bool
val create : ('a -> 'a -> int) -> ('b -> 'b -> int) -> ('a, 'b) t
val add : 'a -> 'b -> ('a, 'b) t -> ('a, 'b) t
add x y m
returns a map containing the same bindings as
m
, plus a binding of x
to y
.val find : 'a -> ('a, 'b) t -> 'b PSet.t
find x m
returns the current binding of x
in m
val remove_all : 'a -> ('a, 'b) t -> ('a, 'b) t
remove_all x m
returns a map containing the same bindings as
m
, except for x
which is unbound in the returned map.val remove : 'a -> 'b -> ('a, 'b) t -> ('a, 'b) t
remove_all k d m
returns a map containing the same bindings as
m
, except for k
which is not bound to d
anymore in the returned
map. If k
was not bound to d
, nothing is changed.val mem : 'a -> ('a, 'b) t -> bool
mem x m
returns true
if m
contains at least a binding for x
,
and false
otherwise.val iter : ('a -> 'b PSet.t -> unit) -> ('a, 'b) t -> unit
iter f m
applies f
to all bindings in map m
.
f
receives the key as first argument, and the associated value
as second argument. The order in which the bindings are passed to
f
is unspecified. Only current bindings are presented to f
:
bindings hidden by more recent bindings are not passed to f
.val map : ('a PSet.t -> 'b PSet.t) ->
(('a -> 'a -> int) -> 'b -> 'b -> int) ->
('c, 'a) t -> ('c, 'b) t
map f m
returns a map with same domain as m
, where the
associated value a
of all bindings of m
has been
replaced by the result of the application of f
to a
.
The order in which the associated values are passed to f
is unspecified.val mapi : ('a -> 'b PSet.t -> 'c PSet.t) ->
(('b -> 'b -> int) -> 'c -> 'c -> int) ->
('a, 'b) t -> ('a, 'c) t
map
, but the function receives as arguments both the
key and the associated value for each binding of the map.val fold : ('a PSet.t -> 'b -> 'b) -> ('c, 'a) t -> 'b -> 'b
fold f m a
computes (f kN dN ... (f k1 d1 a)...)
,
where k1 ... kN
are the keys of all bindings in m
,
and d1 ... dN
are the associated data.
The order in which the bindings are presented to f
is
unspecified.val foldi : ('a -> 'b PSet.t -> 'c -> 'c) ->
('a, 'b) t -> 'c -> 'c
fold
, but the function receives as arguments both the
key and the associated value for each binding of the map.val enum : ('a, 'b) t -> ('a * 'b) Enum.t
val of_enum : ?keys:('a -> 'a -> int) ->
?data:('b -> 'b -> int) ->
('a * 'b) Enum.t -> ('a, 'b) t
compare
by default.val t_of_sexp : (Sexplib.Sexp.t -> 'a) ->
(Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
val sexp_of_t : ('a -> Sexplib.Sexp.t) ->
('b -> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.t
val print : ?first:string ->
?last:string ->
?sep:string ->
('a Extlib.InnerIO.output -> 'b -> unit) ->
('a Extlib.InnerIO.output -> 'c -> unit) ->
'a Extlib.InnerIO.output -> ('b, 'c) t -> unit