pub trait BlockMap {
// Required methods
fn position_block_containing_offset(&self, offset: usize) -> Option<usize>;
fn get_block_at_idx(&self, block_idx: usize) -> Option<Block>;
fn append_block_with_block_size(&mut self, block_size: usize) -> Block;
fn len(&self) -> usize;
fn truncate(&mut self, offset: usize) -> Option<(usize, usize, Block)>;
fn clear(&mut self);
// Provided methods
fn get_block_containing_offset(&self, offset: usize) -> Option<Block> { ... }
fn is_empty(&self) -> bool { ... }
fn size(&self) -> usize { ... }
}