From 96d13a36b5a089e1d8a559da8d159990dbca4fc4 Mon Sep 17 00:00:00 2001 From: wangboo <5417808+wangboa@user.noreply.gitee.com> Date: Tue, 17 Jan 2023 10:11:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=8C=83=E5=9E=8B=E6=9D=A5=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/mem_table.rs | 21 +++++++++++---------- src/db/mod.rs | 12 +++++++++++- src/db/skip_list.rs | 24 +++++++++++++++--------- src/traits/mod.rs | 3 ++- src/util/mod.rs | 8 +++++--- 5 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/db/mem_table.rs b/src/db/mem_table.rs index 995858d..9bc002c 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 4e9b202..d429a3c 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 725dfe0..144c0b6 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 45c7ee3..47c662e 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 cb17c90..2808228 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; -- Gitee