pub(crate) struct Fnv(u64);
impl Fnv {
pub fn new() -> Self {
Fnv(0xcbf2_9ce4_8422_2325)
}
pub fn u8(&mut self, b: u8) {
self.0 ^= u64::from(b);
self.0 = self.0.wrapping_mul(0x100_0000_01b3);
}
pub fn u16(&mut self, v: u16) {
for b in v.to_le_bytes() {
self.u8(b);
}
}
pub fn u32(&mut self, v: u32) {
for b in v.to_le_bytes() {
self.u8(b);
}
}
pub fn u64(&mut self, v: u64) {
for b in v.to_le_bytes() {
self.u8(b);
}
}
pub fn bool(&mut self, v: bool) {
self.u8(u8::from(v));
}
pub fn finish(&self) -> u64 {
self.0
}
}