use core::cmp::min;
use digest::{FixedOutput, Output, Update};
use super::{Lookup2, GOLDEN_RATIO};
pub struct Hash2;
impl Lookup2<Hash2> {
#[rustfmt::skip]
pub fn hash(mut data: &[u32], initial: u32) -> u32 {
let starting_length = data.len() as u32;
let mut state = [GOLDEN_RATIO, GOLDEN_RATIO, initial];
while data.len() >= 3 {
state[0] = state[0].wrapping_add(data[0]);
state[1] = state[1].wrapping_add(data[1]);
state[2] = state[2].wrapping_add(data[2]);
state = Self::mix(state);
data = &data[3..];
}
state[2] = state[2].wrapping_add((starting_length << 2));
if data.len() >= 2 { state[1] = state[1].wrapping_add(data[1]) }
if data.len() >= 1 { state[0] = state[0].wrapping_add(data[0]) }
state = Self::mix(state);
state[2]
}
}