* feat(docs): Improve/Add comments & some hints for day one starter code * feat(docs): Add comments for day one solution code * feat(docs): Add figure for block storage format in starter code (block.rs)
41 lines
1.6 KiB
Rust
41 lines
1.6 KiB
Rust
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
|
|
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
|
|
|
|
mod builder;
|
|
mod iterator;
|
|
|
|
pub use builder::BlockBuilder;
|
|
/// You may want to check `bytes::BufMut` out when manipulating continuous chunks of memory
|
|
use bytes::Bytes;
|
|
pub use iterator::BlockIterator;
|
|
|
|
/// A block is the smallest unit of read and caching in LSM tree.
|
|
/// It is a collection of sorted key-value pairs.
|
|
/// The `actual` storage format is as below (After `Block::encode`):
|
|
///
|
|
/// ----------------------------------------------------------------------------------------------------
|
|
/// | Data Section | Offset Section | Extra |
|
|
/// ----------------------------------------------------------------------------------------------------
|
|
/// | Entry #1 | Entry #2 | ... | Entry #N | Offset #1 | Offset #2 | ... | Offset #N | num_of_elements |
|
|
/// ----------------------------------------------------------------------------------------------------
|
|
pub struct Block {
|
|
data: Vec<u8>,
|
|
offsets: Vec<u16>,
|
|
}
|
|
|
|
impl Block {
|
|
/// Encode the internal data to the data layout illustrated in the tutorial
|
|
/// Note: You may want to recheck if any of the expected field is missing from your output
|
|
pub fn encode(&self) -> Bytes {
|
|
unimplemented!()
|
|
}
|
|
|
|
/// Decode from the data layout, transform the input `data` to a single `Block`
|
|
pub fn decode(data: &[u8]) -> Self {
|
|
unimplemented!()
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|