module Bounded_int_table:sig..end
Bounded_int_table is a table whose keys can be mapped to integers in a fixed
range, 0 ... num_keys-1, where num_keys is specified at table-creation time. The
purpose of Bounded_int_table is to be faster than Hashtbl in situations where one
is willing to pay a space cost for the speed.
Bounded_int_table presents a subset of the Hashtbl interface. The key type can be
any type, but table creation requires a key_to_int function, which will be used
to extract the integer of all keys. If multiple keys map to the same integer, then
only one of them can be in the table at a time. Any operation that supplies a key
whose corresponding integer is outside the allowed range for the table will cause an
exception.
A Bounded_int_table is implemented using two fixed size arrays of size num_keys,
which are supplied at table-creation time. The space used does not depend on the
length of the table but rather only on num_keys. Operations that deal with a
single element (find, mem, add, remove, set) take constant time, and perform one or
two array operations. Operations that deal with all of the keys defined in the table
(data, fold, iter, iter_vals, keys, to_alist) take time proportional to the length
of the table, not num_keys.
type ('key, 'data) t
type('a, 'b)table =('a, 'b) t
include Invariant.S2
include Equal.S2
val create : ?sexp_of_key:('key -> Sexp.t) ->
num_keys:int ->
key_to_int:('key -> int) -> unit -> ('key, 'data) tcreate ~num_keys ~key_to_int returns a table where the keys can map to 0
.. num_keys-1, according to key_to_int. It is an error if num_keys < 0.
sexp_of_key, if supplied, will be used to display keys in error messages.
val keys : ('key, 'a) t -> 'key listval data : ('a, 'data) t -> 'data listval find : ('key, 'data) t -> 'key -> 'data optionval find_exn : ('key, 'data) t -> 'key -> 'dataval find_or_add : ('key, 'data) t -> 'key -> default:(unit -> 'data) -> 'dataval fold : ('key, 'data) t ->
init:'accum -> f:(key:'key -> data:'data -> 'accum -> 'accum) -> 'accumval iter : ('key, 'data) t ->
f:(key:'key -> data:'data -> unit) -> unitval iter_vals : ('a, 'data) t -> f:('data -> unit) -> unitval filter_mapi : ('key, 'data1) t ->
f:(key:'key -> data:'data1 -> 'data2 option) ->
('key, 'data2) tval filter_map : ('key, 'data1) t ->
f:('data1 -> 'data2 option) -> ('key, 'data2) tval mapi : ('key, 'data1) t ->
f:(key:'key -> data:'data1 -> 'data2) -> ('key, 'data2) tval map : ('key, 'data1) t ->
f:('data1 -> 'data2) -> ('key, 'data2) tval for_alli : ('key, 'data) t ->
f:(key:'key -> data:'data -> bool) -> boolval existsi : ('key, 'data) t ->
f:(key:'key -> data:'data -> bool) -> boolval for_all : ('a, 'data) t -> f:('data -> bool) -> boolval exists : ('a, 'data) t -> f:('data -> bool) -> boolval length : ('a, 'b) t -> intval mem : ('key, 'a) t -> 'key -> boolval remove : ('key, 'a) t -> 'key -> unitval set : ('a, 'b) t -> key:'a -> data:'b -> unitval add : ('a, 'b) t ->
key:'a -> data:'b -> [ `Duplicate of 'b | `Ok ]val add_exn : ('a, 'b) t -> key:'a -> data:'b -> unitval to_alist : ('key, 'data) t -> ('key * 'data) listmodule With_key:functor (Key:sigtypetval to_int :t -> intval t_of_sexp :Sexplib.Sexp.t -> tval sexp_of_t :t -> Sexplib.Sexp.tval bin_t :t Bin_prot.Type_class.tval bin_read_t :t Bin_prot.Read.readerval __bin_read_t__ :(int -> t) Bin_prot.Read.readerval bin_reader_t :t Bin_prot.Type_class.readerval bin_size_t :t Bin_prot.Size.sizerval bin_write_t :t Bin_prot.Write.writerval bin_writer_t :t Bin_prot.Type_class.writerend) ->sig..end
val debug : bool Pervasives.refdebug := true to turn on debugging, including potentially slow invariant
checking.val sexp_of_t : ('key -> Sexplib.Sexp.t) ->
('data -> Sexplib.Sexp.t) ->
('key, 'data) t -> Sexplib.Sexp.tcreate ~num_keys ~key_to_int returns a table where the keys can map to 0
.. num_keys-1, according to key_to_int. It is an error if num_keys < 0.
sexp_of_key, if supplied, will be used to display keys in error messages.
Standard hashtbl functions.
Serialization of a bounded int table using bin_io or sexp preserves num_keys,
but only takes space proportional to the length of the table.
set debug := true to turn on debugging, including potentially slow invariant
checking.