brk_vecs 0.0.85

A KISS index/value store
Documentation
use memmap2::MmapMut;
use parking_lot::RwLockReadGuard;

use super::Region;

#[derive(Debug)]
pub struct Reader<'a> {
    mmap: RwLockReadGuard<'a, MmapMut>,
    region: RwLockReadGuard<'static, Region>,
}

impl<'a> Reader<'a> {
    pub fn new(
        mmap: RwLockReadGuard<'a, MmapMut>,
        region: RwLockReadGuard<'static, Region>,
    ) -> Self {
        Self { mmap, region }
    }

    pub fn read(&self, offset: u64, len: u64) -> &[u8] {
        assert!(offset + len <= self.region.len());
        let start = self.region.start() + offset;
        let end = start + len;
        &self.mmap[start as usize..end as usize]
    }

    pub fn read_all(&self) -> &[u8] {
        self.read(0, self.region().len())
    }

    pub fn region(&self) -> &Region {
        &self.region
    }

    pub fn prefixed(&self, offset: u64) -> &[u8] {
        let start = self.region.start() + offset;
        &self.mmap[start as usize..]
    }
}