#[derive(Default)]
pub struct Probe {
pub i: usize,
pub len: usize,
}
impl Probe {
#[inline]
pub fn start(hash: usize, mask: usize) -> Probe {
Probe {
i: hash & mask,
len: 0,
}
}
#[inline]
pub fn next(&mut self, mask: usize) {
self.len += 1;
self.i = (self.i + self.len) & mask;
}
}
pub fn limit(capacity: usize) -> usize {
5 * ((usize::BITS as usize) - (capacity.leading_zeros() as usize) - 1)
}
pub fn entries_for(capacity: usize) -> usize {
let capacity = capacity.checked_mul(8).expect("capacity overflow") / 6;
capacity.next_power_of_two()
}