Crate hash32[−][src]
Expand description
32-bit hashing machinery
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 exposes the same interfaces you’ll find in core::hash: Hash, Hasher,
BuildHasher and BuildHasherDefault. The main difference is that hash32::Hasher::finish
returns a u32 instead of u64, and the contract of hash32::Hasher forbids the implementer
from performing 64-bit (or 128-bit) operations while computing the hash.
#[derive(Hash32)]
The easiest way to implement hash32::Hash for a struct is to use the #[derive(Hash32)].
#[macro_use]
extern crate hash32_derive;
#[derive(Hash32)]
struct Ipv4Addr([u8; 4]);
Hashers
This crate provides implementations of the following 32-bit hashing algorithms:
Future
In the future we’d like to deprecate this crate in favor of making core::hash::Hasher generic
over the size of the computed hash. Below is shown the planned change (but it doesn’t work due
to limitations in the associated_type_defaults feature):
#![feature(associated_type_defaults)]
trait Hasher {
type Hash = u64; // default type for backwards compatibility
fn finish(&self) -> Self::Hash; // changed
fn write(&mut self, bytes: &[u8]);
}With this change a single #[derive(Hash)] would enough to make a type hashable with 32-bit and
64-bit hashers.
Structs
See core::hash::BuildHasherDefault for details
32-bit Fowler-Noll-Vo hasher
32-bit MurmurHash3 hasher
Traits
See core::hash::BuildHasher for details
See core::hash::Hash for details
See core::hash::Hasher for details
