## Module

Module Weak.Make## Documentation

Module
**Make**

:
**functor (H : Hashtbl.HashedType) -> sig end**

Functor building an implementation of the weak hash table structure.

**Parameters:**

"H"

**Hashtbl.HashedType**

*type data *

The type of the elements stored in the table.

*type t *

The type of tables that contain elements of type
**data**
.
Note that weak hash tables cannot be marshaled using
**Pervasives.output_value**
or the functions of the
**Marshal**
module.

*val create *
:
**int -> t**

**create n**
creates a new empty weak hash table, of initial
size
**n**
. The table will grow as needed.

*val clear *
:
**t -> unit**

Remove all elements from the table.

*val merge *
:
**t -> data -> data**

**merge t x**
returns an instance of
**x**
found in
**t**
if any,
or else adds
**x**
to
**t**
and return
**x**
.

*val add *
:
**t -> data -> unit**

**add t x**
adds
**x**
to
**t**
. If there is already an instance
of
**x**
in
**t**
, it is unspecified which one will be
returned by subsequent calls to
**find**
and
**merge**
.

*val remove *
:
**t -> data -> unit**

**remove t x**
removes from
**t**
one instance of
**x**
. Does
nothing if there is no instance of
**x**
in
**t**
.

*val find *
:
**t -> data -> data**

**find t x**
returns an instance of
**x**
found in
**t**
.
Raise
**Not_found**
if there is no such element.

*val find_all *
:
**t -> data -> data list**

**find_all t x**
returns a list of all the instances of
**x**
found in
**t**
.

*val mem *
:
**t -> data -> bool**

**mem t x**
returns
**true**
if there is at least one instance
of
**x**
in
**t**
, false otherwise.

*val iter *
:
**(data -> unit) -> t -> unit**

**iter f t**
calls
**f**
on each element of
**t**
, in some unspecified
order. It is not specified what happens if
**f**
tries to change
**t**
itself.

*val fold *
:
**(data -> 'a -> 'a) -> t -> 'a -> 'a**

**fold f t init**
computes
**(f d1 (... (f dN init)))**
where
**d1 ... dN**
are the elements of
**t**
in some unspecified order.
It is not specified what happens if
**f**
tries to change
**t**
itself.

*val count *
:
**t -> int**

Count the number of elements in the table.
**count t**
gives the
same result as
**fold (fun _ n -> n+1) t 0**
but does not delay the
deallocation of the dead elements.

*val stats *
:
**t -> int * int * int * int * int * int**

Return statistics on the table. The numbers are, in order: table length, number of entries, sum of bucket lengths, smallest bucket length, median bucket length, biggest bucket length.