Base.Hash
Sourcemodule F
(Hash : S) :
Full
with type hash_value = Hash.hash_value
and type state = Hash.state
and type seed = Hash.seed
The code of ppx_hash
is agnostic to the choice of hash algorithm that is used. However, it is not currently possible to mix various choices of hash algorithms in a given code base.
We experimented with:
Our findings were as follows:
Hence, we are here making the choice of using this Internalhash (that is, Murmur3, the OCaml hash algorithm as of 4.03) as our hash algorithm. It means that the state of the hash function does not need to be preallocated, and makes for simpler use in hash tables and other structures.
include Full
with type state = Base_internalhash_types.state
and type seed = Base_internalhash_types.seed
and type hash_value = Base_internalhash_types.hash_value
Name of the hash-function, e.g., "internalhash", "siphash"
state
is the internal hash-state used by the hash function.
fold_<T> state v
incorporates a value v
of type <T> into the hash-state, returning a modified hash-state. Implementations of the fold_<T>
functions may mutate the state
argument in place, and return a reference to it. Implementations of the fold_<T> functions should not allocate.
seed
is the type used to seed the initial hash-state.
reset ?seed state
initializes/resets a hash-state with the given seed
, or else a default-seed. Argument state
may be mutated. Should not allocate.
hash_value
The type of hash values, returned by get_hash_value
.
get_hash_value
extracts a hash-value from the hash-state.
create ?seed ()
is a convenience. Equivalent to reset ?seed (alloc ())
.
of_fold fold
constructs a standard hash function from an existing fold function.
run ?seed folder x
runs folder
on x
in a newly allocated hash-state, initialized using optional seed
or a default-seed.
The following identity exists: run [%hash_fold: T]
== [%hash: T]
run
can be used if we wish to run a hash-folder with a non-default seed.