diff --git a/src/db/mem_table.rs b/src/db/mem_table.rs index 995858d0bc7fcc812445068b1df862ce14c45213..9bc002cc10fae2d69fbf6c4418c9cffbddfb5872 100644 --- a/src/db/mem_table.rs +++ b/src/db/mem_table.rs @@ -1,26 +1,25 @@ use std::rc::Rc; use crate::traits::comparator_trait::ComparatorTrait; use crate::traits::DataIterator; +use crate::util::comparator::InternalKeyComparator; use crate::util::slice::Slice; use crate::util::Result; -enum ValueType { +pub enum ValueType { Insert, Deletion, } /// 内存表 -struct MemTable { - +pub struct MemTable { + cmp: Rc, } /// 临时, 查找键 struct LookupKey {} -type MemTableRef = Rc; - -impl MemTable { +impl MemTable { /// 创建内存表 /// @@ -33,10 +32,12 @@ impl MemTable { /// # Examples /// /// ``` - /// let mt = MemTable::create(comp); + /// let mt = MemTable::create(cmp); /// ``` - pub fn create(_comparator: Rc>) -> Self { - todo!() + pub fn create(cmp: Rc) -> Self { + Self { + cmp, + } } /// 返回该表使用的内存近似值 @@ -66,7 +67,7 @@ impl MemTable { } /// 通过 key 查找结果 - pub fn get(&self, key: &LookupKey) -> Result> { + pub fn get(&self, _key: &LookupKey) -> Result> { todo!() } diff --git a/src/db/mod.rs b/src/db/mod.rs index 4e9b202d7c316ba34b846a2689ed69ea7fbf4a03..d429a3c4b326139c56ecec5dc00b7a650fd23423 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -1,5 +1,15 @@ +use crate::db::skip_list::SkipList; +use crate::db::mem_table::MemTable; +use crate::util::comparator::{BytewiseComparatorImpl, InternalKeyComparator}; +use crate::util::slice::Slice; + pub mod log_writer; pub mod log_reader; mod log_wr_test; pub mod skip_list; -mod mem_table; \ No newline at end of file +pub mod mem_table; + +/// 默认调表 +pub type DefaultSkipList = SkipList; +/// 默认内存表 +pub type DefaultMemTable = MemTable; \ No newline at end of file diff --git a/src/db/skip_list.rs b/src/db/skip_list.rs index 725dfe05ab8a4a41d9c5ded367137b4383ea69d1..144c0b60f26f215d4c7065a134c631bdf964f433 100644 --- a/src/db/skip_list.rs +++ b/src/db/skip_list.rs @@ -1,21 +1,28 @@ use std::rc::Rc; + use crate::traits::comparator_trait::ComparatorTrait; use crate::util::Arena; -use crate::util::slice::Slice; +use crate::util::comparator::BytewiseComparatorImpl; use crate::util::Result; +use crate::util::slice::Slice; -pub struct SkipList { - node: Node -} - +// todo struct Node { value: T, } -impl SkipList { +pub struct SkipList { + node: Option>, + comp: Rc, +} - pub fn create(_comparator: Rc>, _arena: Rc) -> Self { - todo!() +impl SkipList { + + pub fn create(comparator: Rc, _arena: Rc) -> Self { + Self { + node: None, + comp: comparator, + } } pub fn insert(&mut self, _seq_no: usize, _key: &Slice) -> Result<()> { @@ -29,5 +36,4 @@ impl SkipList { pub fn get_max_height(&self) -> usize { todo!() } - } \ No newline at end of file diff --git a/src/traits/mod.rs b/src/traits/mod.rs index 45c7ee32368446a52d4e8ac8666817e0171e61df..47c662e6d0774ea213fb7838379a7ae1e0073d24 100644 --- a/src/traits/mod.rs +++ b/src/traits/mod.rs @@ -4,4 +4,5 @@ pub mod comparator_trait; pub mod coding_trait; pub mod filter_policy_trait; -pub use iterator::DataIterator; \ No newline at end of file +use std::rc::Rc; +pub use iterator::DataIterator; diff --git a/src/util/mod.rs b/src/util/mod.rs index cb17c906aae7e8102a3beda4c8cc2dee0d572ff7..2808228e6b8354af1171e11930190dad186e3f4b 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -1,7 +1,9 @@ +use std::rc::Rc; use std::result; pub use arena::Arena; +use crate::util::comparator::{BytewiseComparatorImpl, InternalKeyComparator}; use crate::util::status::Status; /// 常量定义 @@ -25,12 +27,12 @@ mod bloom_filter_test; pub mod filter_policy; mod filter_policy_test; -/// 定义别名 -pub type Result = result::Result; - pub mod histogram; mod histogram_test; mod hash; mod hash_test; mod mutex_lock; mod mutex_lock_test; + +/// 定义别名 +pub type Result = result::Result;