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§
- Build
Hasher Default - A copy of
core::hash::BuildHasherDefault, but with a const constructor. - FnvHasher
- 32-bit Fowler-Noll-Vo hasher
- Murmur3
Hasher - 32-bit MurmurHash3 hasher
Traits§
- Hasher
- An extension of core::hash::Hasher for hashers which use 32 bits.