#![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, offsets: Vec, } 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;