1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
const BASIS: u32 = 0x811c9dc5; const PRIME: u32 = 0x1000193; /// 32-bit Fowler-Noll-Vo hasher pub struct Hasher { state: u32, } impl Default for Hasher { fn default() -> Self { Hasher { state: BASIS } } } impl ::Hasher for Hasher { #[inline] fn finish(&self) -> u32 { self.state } #[inline] fn write(&mut self, bytes: &[u8]) { for byte in bytes { self.state ^= u32::from(*byte); self.state = self.state.wrapping_mul(PRIME); } } }