diff --git a/README.md b/README.md index 6b9b6ffcd9e9e0672e48230926be3de500dbcab1..5d05fc283ed5d050f3b338bad0d428a5544e0835 100644 --- a/README.md +++ b/README.md @@ -40,21 +40,39 @@ LSM tree 是许多 KV型或日志型数据库所依赖的核心实现,例如Bi ## RoadMap 1. 1.0.0 版本, 完成 util 相关的内容 - | 功能模块 | 完成人 | 进度 | |-------------------------------|-----------------|------| -| Arena (Memory Management) | wangboo | | +| Arena (Memory Management) | wangboo | 100% | | bloom | fengyang | 10% | | Cache | colagy | | | Coding (Primitive Type SerDe) | colagy | | | Comparator | fengyang | 90% | -| CRC | wangboo、lxd5866 | | +| CRC | wangboo、lxd5866 | 100% | | Env | lxd5866 | | | filter_policy | fengyang | 10% | | Hash | fengyang | 100% | | Histgram | kazeseiriou | 100% | -| loging | | | +| loging | | | | MutexLock | kazeseiriou | 100% | | Random | colagy | | | Status | fengyang | 100% | -| Slice | wangboo | | \ No newline at end of file +| Slice | wangboo | 100% | + +2. 1.1.0 版本, 完成基础零部件 + +| 功能模块 | 完成人 | 进度 | +|------------------|-----|-----| +| skiplist | 未认领 | | +| MemTableIterator | 未认领 | | +| MemTable | 未认领 | | +| LogReader | 未认领 | | +| LogWriter | 未认领 | | +| TableCache | 未认领 | | +| FileMetaData | 未认领 | | +| VersionEdit | 未认领 | | +| VersionSet | 未认领 | | +| ReadOptions | 未认领 | | +| WriteOptions | 未认领 | | +| WriteBatch | 未认领 | | + +3. 1.2.0 版本, 完成核心组件 \ No newline at end of file diff --git a/src/util/arena.rs b/src/util/arena.rs index 611053b5857101b48ef6e2666fa008335fc84bdf..3f46dcb401207e891698b81eb28388c407d88531 100644 --- a/src/util/arena.rs +++ b/src/util/arena.rs @@ -58,6 +58,7 @@ impl Arena { return self.allocate_fallback(bytes, align); } + #[inline] pub fn memory_usage(&self) -> usize { self.memory_usage } diff --git a/src/util/crc.rs b/src/util/crc.rs index c0f8b349616c92b13baf907332fd22a3035446a0..cf7918b7c99edf29235bf781513f328179943f9f 100644 --- a/src/util/crc.rs +++ b/src/util/crc.rs @@ -240,6 +240,8 @@ const K_STRIDE_EXTENSION_TABLE3: [u32; 256] = [ /// 可以被计算 crc 值的特质 /// 默认实现了 &[T], Vec[T], Slice, &str, String pub trait AsCrc { + + #[inline] fn as_crc(&self) -> u32 { self.as_crc_extend(0) } diff --git a/src/util/slice.rs b/src/util/slice.rs index c9ddf7f4f55da1022bd1500d915c33bf515de5b3..7c0bbb38755b02d50b36846cd797b9d369fbcd4e 100644 --- a/src/util/slice.rs +++ b/src/util/slice.rs @@ -14,6 +14,7 @@ extern { impl Default for Slice { /// 构造一个空的 Slice + #[inline] fn default() -> Self { Self { data: Vec::new() @@ -24,6 +25,7 @@ impl Default for Slice { impl Slice { /// 从 &mut [u8] 转到 Slice, 这里存在内存拷贝开销 + #[inline] pub fn from_buf(buf: &[u8]) -> Self { Self { data: buf.to_owned() @@ -95,6 +97,7 @@ impl<'a> Slice { impl From for String { /// 将 Slice 内数据的所有权移交给 String + #[inline] fn from(s: Slice) -> Self { unsafe { String::from_utf8_unchecked(s.data) @@ -103,12 +106,14 @@ impl From for String { } impl From for Vec { + #[inline] fn from(s: Slice) -> Self { s.data } } impl > From for Slice { + #[inline] fn from(r: R) -> Self { Self { data: Vec::from(r.as_ref()) @@ -118,6 +123,7 @@ impl > From for Slice { impl PartialEq for Slice { /// 判断两个 Slice 是否相同 + #[inline] fn eq(&self, other: &Self) -> bool { return self.size() == other.size() && unsafe { memcmp( @@ -158,6 +164,7 @@ impl core::ops::Index for Slice { type Output = u8; /// 获取某个下标的数据 + #[inline] fn index(&self, index: usize) -> &Self::Output { assert!(index < self.size()); &(**self)[index] @@ -168,6 +175,7 @@ impl Deref for Slice { type Target = [u8]; /// Slice 解引用到 &[u8] + #[inline] fn deref(&self) -> &Self::Target { &*self.data }