kip_db 0.1.2-alpha.26.fix1

轻量级、异步 基于LSM Leveled Compaction K-V数据库
Documentation
pub(crate) mod iter;

use crate::kernel::lsm::iterator::SeekIter;
use crate::kernel::lsm::mem_table::KeyValue;
use crate::kernel::lsm::table::btree_table::iter::BTreeTableIter;
use crate::kernel::lsm::table::Table;
use bytes::Bytes;
use std::collections::BTreeMap;

pub(crate) struct BTreeTable {
    level: usize,
    gen: i64,
    len: usize,
    inner: BTreeMap<Bytes, KeyValue>,
}

impl BTreeTable {
    pub(crate) fn new(level: usize, gen: i64, data: Vec<KeyValue>) -> Self {
        let len = data.len();
        let inner = BTreeMap::from_iter(
            data.into_iter()
                .map(|(key, value)| (key.clone(), (key, value))),
        );

        BTreeTable {
            level,
            gen,
            len,
            inner,
        }
    }
}

impl Table for BTreeTable {
    fn query(&self, key: &[u8]) -> crate::kernel::KernelResult<Option<KeyValue>> {
        Ok(self.inner.get(key).cloned())
    }

    fn len(&self) -> usize {
        self.len
    }

    fn size_of_disk(&self) -> u64 {
        0
    }

    fn gen(&self) -> i64 {
        self.gen
    }

    fn level(&self) -> usize {
        self.level
    }

    #[allow(clippy::todo)]
    fn iter<'a>(
        &'a self,
    ) -> crate::kernel::KernelResult<Box<dyn SeekIter<'a, Item = KeyValue> + 'a + Send + Sync>>
    {
        Ok(Box::new(BTreeTableIter::new(self)))
    }
}