diff --git a/Cargo.toml b/Cargo.toml index 88264ee6bdf172d927f84af0bd38575d758c6dc6..7b77544452777e14c746dc56715b2fa8e169f87e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,10 @@ name = "level_db_rust" version = "0.1.0" edition = "2021" +[lib] +name = "level_db_rust" +path = "src/lib.rs" + # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/README.md b/README.md index a5983740c541666a593e5ed9c8d61ac7d464d580..2c55689898ae543f8f3286eea0c33ab089d3663c 100644 --- a/README.md +++ b/README.md @@ -27,5 +27,8 @@ LevelDB for rust 4. 新建 Pull Request -#### 特技 +## TODO +[TODO和分工](doc/TODOList.md) +## 编码和git规范 +[编码和git规范](doc/CodeStyle.md) \ No newline at end of file diff --git a/doc/CodeStyle.md b/doc/CodeStyle.md new file mode 100644 index 0000000000000000000000000000000000000000..cc05186c66af927fb8d5fb8f85ed79eb9ae48119 --- /dev/null +++ b/doc/CodeStyle.md @@ -0,0 +1,15 @@ +# 1. 规范 +1. 实现和测试分成两个文件, 实现文件 xx.rs, 测试文件 xx_test.rs +2. struct/trait 驼峰式命名, 方法 全小写下滑线命名 +3. 其它的参照 Rust 编码规范 +4. 所有方法都要求测试案例覆盖 +5. 所有方法都要求有注释 +6. 常量都要求有注释 +7. 缩写要遵循业界规范 +8. cargo不允许引用第三方库 + +# 2. 分支管理规范 +1. master作为主分支 +2. feat/xx 作为开发分支 +3. 其它人从主分支checkout分支 +4. 开发分支提交到git, 然后发起 merge_request, merge 必须超过2个人同意 \ No newline at end of file diff --git a/doc/TODOList.md b/doc/TODOList.md new file mode 100644 index 0000000000000000000000000000000000000000..d4e60bb6e0f307ff2b88f17dc139291a3d8ab823 --- /dev/null +++ b/doc/TODOList.md @@ -0,0 +1,38 @@ +# DB +## Build / Compaction +## DB implements +## Log - WAL canghai +## Memtable - wangxu +## SkipList - wangxu +## Snapshot / VersionSet - yuanyang, zhangtao, canghai +## WriteBatch +## TableCache + +# Table +## Block +## FilterBlock +## Format (encode/decode) +## Table Level Iterator (Empty / MergingIterator / TwoLevelIterator) +## Table Build +## Recovery +## SStable - canghai + +# Util +## Arena (Memory Management) - wangboo +## BloomFilter - yuanyang +## Cache - wangxu +## Coding (Primitive Type SerDe) - wangxu +## Comparator - yuanyang +## CRC - canghai +## Env - canghai +## Hash - canghai +## Histgram - zhengcheng +## Logging - zhoujian +## MutexLock - zhengcheng +## Status - yuanyang +## Random - yuanyang +## Slice - wangboo + +# Traits +## public trait defined in leveldb include dir +# \ No newline at end of file diff --git a/src/db/mod.rs b/src/db/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..376832202a824ba64d7545db9b32132d0b104721 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,13 @@ +mod db; +mod table; +mod util; +mod traits; + +mod test { + + #[test] + pub fn test() { + println!("hello world"); + } + +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index e7a11a969c037e00a796aafeff6258501ec15e9a..0000000000000000000000000000000000000000 --- a/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} diff --git a/src/table/mod.rs b/src/table/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/traits/iterator.rs b/src/traits/iterator.rs new file mode 100644 index 0000000000000000000000000000000000000000..319650a7a237f22507e4ef62f6347fac70f37f12 --- /dev/null +++ b/src/traits/iterator.rs @@ -0,0 +1,24 @@ +use crate::util::Slice; + +pub trait Iterator { + + fn valid(&self) -> bool; + + fn seek_to_first(&mut self); + + fn seek_to_last(&mut self); + + fn seek(&mut self, target: &Slice); + + fn next(&mut self); + + fn pre(&mut self); + + fn key(&self) -> &Slice; + + fn value(&self) -> &Slice; +} + +trait AAA { + +} diff --git a/src/traits/mod.rs b/src/traits/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..962c0ad7e80408f192fe458fc2096d7c1f36df13 --- /dev/null +++ b/src/traits/mod.rs @@ -0,0 +1,4 @@ +use crate::util::Slice; + +mod iterator; + diff --git a/src/util/mod.rs b/src/util/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..3f159e66e099d362139eb5513fe2506f8eab5d8b --- /dev/null +++ b/src/util/mod.rs @@ -0,0 +1,3 @@ +mod slice; +mod status; +mod slice_test; \ No newline at end of file diff --git a/src/util/slice.rs b/src/util/slice.rs new file mode 100644 index 0000000000000000000000000000000000000000..da59ff75bef4fbc5153c226c93fc48d672f639ba --- /dev/null +++ b/src/util/slice.rs @@ -0,0 +1,11 @@ + +pub struct Slice { + +} + +impl Default for Slice { + fn default() -> Self { + todo!() + } +} + diff --git a/src/util/slice_test.rs b/src/util/slice_test.rs new file mode 100644 index 0000000000000000000000000000000000000000..02d05e289bd0ea11c838bd5810af8d336aceb0b2 --- /dev/null +++ b/src/util/slice_test.rs @@ -0,0 +1,10 @@ + +mod test { + use crate::util::slice::Slice; + + #[test] + fn test() { + let slice = Slice::default(); + } + +} \ No newline at end of file diff --git a/src/util/status.rs b/src/util/status.rs new file mode 100644 index 0000000000000000000000000000000000000000..ae9e509f916cf277e9a414a6ec40278a0e76f793 --- /dev/null +++ b/src/util/status.rs @@ -0,0 +1,4 @@ + +pub enum Status { + +} \ No newline at end of file