Module CCHashtbl

Extension to the standard Hashtbl

since
0.4
type 'a sequence = ('a -> unit) -> unit
type 'a eq = 'a -> 'a -> bool
type 'a hash = 'a -> int
type 'a printer = Stdlib.Format.formatter -> 'a -> unit

Polymorphic tables

module Poly : sig ... end
include module type of Poly
val get : ('a'b) Stdlib.Hashtbl.t -> 'a -> 'b option

Safe version of Hashtbl.find.

val get_or : ('a'b) Stdlib.Hashtbl.t -> 'a -> default:'b -> 'b

get_or tbl k ~default returns the value associated to k if present, and returns default otherwise (if k doesn't belong in tbl).

since
0.16
val keys : ('a'b) Stdlib.Hashtbl.t -> 'a sequence

Iterate on keys (similar order as Hashtbl.iter).

val values : ('a'b) Stdlib.Hashtbl.t -> 'b sequence

Iterate on values in the table.

val keys_list : ('a'b) Stdlib.Hashtbl.t -> 'a list

keys_list t is the list of keys in t. If the key is in the Hashtable multiple times, all occurrences will be returned.

since
0.8
val values_list : ('a'b) Stdlib.Hashtbl.t -> 'b list

values_list t is the list of values in t.

since
0.8
val map_list : ('a -> 'b -> 'c) -> ('a'b) Stdlib.Hashtbl.t -> 'c list

Map on a hashtable's items, collect into a list.

val incr : ?⁠by:int -> ('a, int) Stdlib.Hashtbl.t -> 'a -> unit

incr ?by tbl x increments or initializes the counter associated with x. If get tbl x = None, then after update, get tbl x = Some 1; otherwise, if get tbl x = Some n, now get tbl x = Some (n+1).

parameter by

if specified, the int value is incremented by by rather than 1.

since
0.16
val decr : ?⁠by:int -> ('a, int) Stdlib.Hashtbl.t -> 'a -> unit

Like incr but subtract 1 (or the value of by). If the value reaches 0, the key is removed from the table. This does nothing if the key is not already present in the table.

since
0.16
val to_seq : ('a'b) Stdlib.Hashtbl.t -> ('a * 'b) sequence

Iterate on bindings in the table.

val add_list : ('a'b list) Stdlib.Hashtbl.t -> 'a -> 'b -> unit

add_list tbl x y adds y to the list x is bound to. If x is not bound, it becomes bound to y.

since
0.16
val add_seq : ('a'b) Stdlib.Hashtbl.t -> ('a * 'b) sequence -> unit

Add the corresponding pairs to the table, using Hashtbl.add.

since
0.16
val of_seq : ('a * 'b) sequence -> ('a'b) Stdlib.Hashtbl.t

From the given bindings, added in order.

val add_seq_count : ('a, int) Stdlib.Hashtbl.t -> 'a sequence -> unit

add_seq_count tbl seq increments the count of each element of seq by calling incr. This is useful for counting how many times each element of seq occurs.

since
0.16
val of_seq_count : 'a sequence -> ('a, int) Stdlib.Hashtbl.t

Like add_seq_count, but allocates a new table and returns it.

since
0.16
val to_list : ('a'b) Stdlib.Hashtbl.t -> ('a * 'b) list

List of bindings (order unspecified).

val of_list : ('a * 'b) list -> ('a'b) Stdlib.Hashtbl.t

Build a table from the given list of bindings k_i -> v_i, added in order using add. If a key occurs several times, it will be added several times, and the visible binding will be the last one.

val update : ('a'b) Stdlib.Hashtbl.t -> f:('a -> 'b option -> 'b option) -> k:'a -> unit

update tbl ~f ~k updates key k by calling f k (Some v) if k was mapped to v, or f k None otherwise; if the call returns None then k is removed/stays removed, if the call returns Some v' then the binding k -> v' is inserted using Hashtbl.replace.

since
0.14
val get_or_add : ('a'b) Stdlib.Hashtbl.t -> f:('a -> 'b) -> k:'a -> 'b

get_or_add tbl ~k ~f finds and returns the binding of k in tbl, if it exists. If it does not exist, then f k is called to obtain a new binding v; k -> v is added to tbl and v is returned.

since
1.0
val pp : 'a printer -> 'b printer -> ('a'b) Stdlib.Hashtbl.t printer

Printer for table. Renamed from print since 2.0.

since
0.13

Functor

module type S = sig ... end
module Make : functor (X : Stdlib.Hashtbl.HashedType) -> S with type Make.key = X.t and type 'a Make.t = 'a Stdlib.Hashtbl.Make(X).t