mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-07 11:45:41 -05:00
94 lines
1.7 KiB
OCaml
94 lines
1.7 KiB
OCaml
|
|
(* This file is free software, part of containers. See file "license" for more details. *)
|
|
|
|
(** {1 Associative containers with Heterogeneous Values}
|
|
|
|
This is similar to {!CCMixtbl}, but the injection is directly used as
|
|
a key.
|
|
|
|
@since 0.17 *)
|
|
|
|
type 'a iter = ('a -> unit) -> unit
|
|
type 'a gen = unit -> 'a option
|
|
|
|
module Key : sig
|
|
type 'a t
|
|
|
|
val create : unit -> 'a t
|
|
|
|
val equal : 'a t -> 'a t -> bool
|
|
(** Compare two keys that have compatible types. *)
|
|
end
|
|
|
|
type pair =
|
|
| Pair : 'a Key.t * 'a -> pair
|
|
|
|
(** {2 Imperative table indexed by [Key]} *)
|
|
module Tbl : sig
|
|
type t
|
|
|
|
val create : ?size:int -> unit -> t
|
|
|
|
val mem : t -> _ Key.t -> bool
|
|
|
|
val add : t -> 'a Key.t -> 'a -> unit
|
|
|
|
val remove : t -> _ Key.t -> unit
|
|
|
|
val length : t -> int
|
|
|
|
val find : t -> 'a Key.t -> 'a option
|
|
|
|
val find_exn : t -> 'a Key.t -> 'a
|
|
(** @raise Not_found if the key is not in the table. *)
|
|
|
|
val iter : (pair -> unit) -> t -> unit
|
|
|
|
val to_iter : t -> pair iter
|
|
|
|
val of_iter : pair iter -> t
|
|
|
|
val add_iter : t -> pair iter -> unit
|
|
|
|
val add_list : t -> pair list -> unit
|
|
|
|
val of_list : pair list -> t
|
|
|
|
val to_list : t -> pair list
|
|
end
|
|
|
|
(** {2 Immutable map} *)
|
|
module Map : sig
|
|
type t
|
|
|
|
val empty : t
|
|
|
|
val mem : _ Key.t -> t -> bool
|
|
|
|
val add : 'a Key.t -> 'a -> t -> t
|
|
|
|
val remove : _ Key.t -> t -> t
|
|
|
|
val length : t -> int
|
|
|
|
val cardinal : t -> int
|
|
|
|
val find : 'a Key.t -> t -> 'a option
|
|
|
|
val find_exn : 'a Key.t -> t -> 'a
|
|
(** @raise Not_found if the key is not in the table. *)
|
|
|
|
val iter : (pair -> unit) -> t -> unit
|
|
|
|
val to_iter : t -> pair iter
|
|
|
|
val of_iter : pair iter -> t
|
|
|
|
val add_iter : t -> pair iter -> t
|
|
|
|
val add_list : t -> pair list -> t
|
|
|
|
val of_list : pair list -> t
|
|
|
|
val to_list : t -> pair list
|
|
end
|