Shared hashtables
This is a shared memory version of Hashtbl
. Note that the degree
of parallelization is quite restricted - practically all operations
need to be serialized (with the exception of the "ro" variants).
The type of hash tables from type 'a
to type 'b
and a
header of type 'h
The marshallable descriptor of a shared hash table
add tbl x y
adds a binding of x
to y
in table tbl
.
Previous bindings for x
are not removed, but simply
hidden. That is, after performing Netmcore_hashtbl.removetbl x
,
the previous binding for x
, if any, is restored.
(Same behavior as with association lists.)
find_ro tbl x
returns the current binding of x
in tbl
,
or raises Not_found
if no such binding exists. If it is possible
that the table is being modified at the same time, this function
can crash. (Suffix "_ro" = for "read-only" hashtables.)
find_p tbl x f
looks up the current binding of x
in tbl
,
and calls f
with this binding as argument. During the execution
of f
the binding is pinned and cannot be garbage-collected.
Raises Not_found
if there is no such binding.
Hashtbl.find_all tbl x
returns the list of all data
associated with x
in tbl
.
The current binding is returned first, then the previous
bindings, in reverse order of introduction in the table.
If it is possible
that the table is being modified at the same time, this function
can crash. (Suffix "_ro" = for "read-only" hashtables.)
Version of find_all
with pinned result
Hashtbl.mem tbl x
checks if x
is bound in tbl
. If it is possible
that the table is being modified at the same time, this function
can crash. (Suffix "_ro" = for "read-only" hashtables.)
Safe version of mem_ro
in the presence of parallel modifications.
It is a bit slower, though.
Hashtbl.remove tbl x
removes the current binding of x
in tbl
,
restoring the previous binding if it exists.
It does nothing if x
is not bound in tbl
.
Hashtbl.iter f tbl
applies f
to all bindings in table tbl
.
f
receives the key as first argument, and the associated value
as second argument. Each binding is presented exactly once to f
.
The order in which the bindings are passed to f
is unspecified.
However, if the table contains several bindings for the same key,
they are passed to f
in reverse order of introduction, that is,
the most recent binding is passed first.
The table cannot be modified while iter
is running. Any attempt
will result in a deadlock.
Hashtbl.length tbl
returns the number of bindings in tbl
.
Multiple bindings are counted multiply, so Hashtbl.length
gives the number of times Hashtbl.iter
calls its first argument.