Expand description
32-bit hashing algorithms
Why?
Because 32-bit architectures are a thing (e.g. ARM Cortex-M) and you don’t want your hashing function to pull in a bunch of slow 64-bit compiler intrinsics (software implementations of 64-bit operations).
Relationship to core::hash
This crate extends core::hash
with a 32-bit version of Hasher
, which extends
core::hash::Hasher
. It requires that the hasher only performs 32-bit operations when computing
the hash, and adds finish32
to get the hasher’s result as a u32
. The standard finish
method should just zero-extend this result.
Since it extends core::hash::Hasher
, Hasher
can be used with any type which implements the
standard Hash
trait.
This crate also adds a version of BuildHasherDefault
with a const constructor, to work around
the core
version’s lack of one.
Hashers
This crate provides implementations of the following 32-bit hashing algorithms:
Generic code
In generic code, the trait bound H: core::hash::Hasher
accepts both 64-bit hashers like
std::collections::hash_map::DefaultHasher
; and 32-bit hashers like the ones defined in this
crate (hash32::FnvHasher
and hash32::Murmur3Hasher
)
The trait bound H: hash32::Hasher
is more restrictive as it only accepts 32-bit hashers.
The BuildHasherDefault<H>
type implements the core::hash::BuildHasher
trait so it can
construct both 32-bit and 64-bit hashers. To constrain the type to only produce 32-bit hasher
you can add the trait bound H::Hasher: hash32::Hasher
MSRV
This crate is guaranteed to compile on latest stable Rust. It might compile on older versions but that may change in any new patch release.
Structs
- A copy of
core::hash::BuildHasherDefault
, but with a const constructor. - 32-bit Fowler-Noll-Vo hasher
- 32-bit MurmurHash3 hasher
Traits
- An extension of core::hash::Hasher for hashers which use 32 bits.