blockset 0.2.3

Data Block Set
Documentation
#[derive(Default)]
pub struct BitVec {
    pub value: u64,
    pub len: u8,
}

impl BitVec {
    pub const fn new(v: u32, len: u8) -> Self {
        Self {
            value: v as u64,
            len,
        }
    }
    pub fn push(&mut self, f: &mut impl FnMut(u32), size: u8, b: BitVec) {
        assert!(size <= 32);
        self.value |= b.value << self.len;
        self.len += b.len;
        let mask = (1 << size) - 1;
        loop {
            if self.len < size {
                return;
            }
            f((self.value & mask) as u32);
            self.len -= size;
            self.value >>= size;
        }
    }
}