ocaml-containers/src/data/CCMixset.mli
Simon Cruanes 52f585d27b headers
2016-02-19 19:44:39 +01:00

52 lines
1.4 KiB
OCaml

(* This file is free software, part of containers. See file "license" for more details. *)
(** {1 Set of Heterogeneous Values}
{[
let k1 : int key = newkey () in
let k2 : int key = newkey () in
let k3 : string key = newkey () in
let set =
empty
|> set ~key:k1 1
|> set ~key:k2 2
|> set ~key:k3 "3"
in
assert (get ~key:k1 set = Some 1);
assert (get ~key:k2 set = Some 2);
assert (get ~key:k3 set = Some "3");
()
]}
@since 0.11 *)
type t
(** A set of values of heterogeneous types *)
type 'a key
(** A unique "key" to access a value of type ['a] in a [set] *)
val newkey : unit -> 'a key
(** [newkey ()] creates a new unique key that can be used to access
a ['a] value in a set. Each key created with [newkey] is distinct
from any other key, even if they have the same type.
Not thread-safe. *)
val empty : t
(** Empty set *)
val set : key:'a key -> 'a -> t -> t
(** [set ~key v set] maps [key] to [v] in [set]. It means that
for every [set], [get ~key (set ~key v set) = Some v]. *)
val get : key:'a key -> t -> 'a option
(** [get ~key set] obtains the value for [key] in [set], if any. *)
val get_exn : key:'a key -> t -> 'a
(** Same as {!get}, but can fail
@raise Not_found if the key is not present *)
val cardinal : t -> int
(** Number of mappings *)