minidex 0.14.1

A lightweight indexing engine for filesystem entries
Documentation
pub(crate) struct DeltaLeb128Iterator<'a> {
    data: &'a [u8],
    current_doc_id: u32,
    offset: usize,
}

impl<'a> DeltaLeb128Iterator<'a> {
    pub(crate) fn new(data: &'a [u8]) -> Self {
        Self {
            data,
            current_doc_id: 0,
            offset: 0,
        }
    }
}

impl Iterator for DeltaLeb128Iterator<'_> {
    type Item = u32;

    fn next(&mut self) -> Option<Self::Item> {
        if self.offset >= self.data.len() {
            return None;
        }

        let mut delta = 0u32;
        let mut shift = 0;

        while self.offset < self.data.len() {
            let byte = self.data[self.offset];
            self.offset += 1;

            delta += ((byte & 0x7F) as u32) << shift;

            if byte & 0x80 == 0 {
                break;
            }
            shift += 7;
        }

        self.current_doc_id += delta;
        Some(self.current_doc_id)
    }
}