From 40bbfeb132ee2529aa430cb0d3990a618637a1b8 Mon Sep 17 00:00:00 2001 From: Chris Mikkelson Date: Mon, 12 Aug 2024 19:30:07 -0500 Subject: [PATCH] Weave CBuf into blocks for compression --- src/reader/block.rs | 8 +++----- src/reader/mod.rs | 11 ++++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/reader/block.rs b/src/reader/block.rs index b770b05..5f5f1a0 100644 --- a/src/reader/block.rs +++ b/src/reader/block.rs @@ -1,4 +1,3 @@ -use crate::reader::DataSlice; use crate::{Entry, Iter, Result}; use integer_encoding::VarInt; use std::mem::size_of; @@ -37,14 +36,14 @@ impl RestartType { #[derive(Debug)] pub(crate) struct Block> { - data: DataSlice, + data: D, restart_count: usize, restart_off: usize, restart_type: RestartType, } impl> Block { - pub(crate) fn new(data: DataSlice) -> Result { + pub(crate) fn new(data: D) -> Result { if data.as_ref().len() < size_of::() { return Err("block data too short".into()); } @@ -222,7 +221,6 @@ impl> Iter for BlockIter { mod test { use crate::reader::block::Block; - use crate::reader::DataSlice; use crate::writer::block_builder::BlockBuilder; use crate::Entry; use crate::Iter; @@ -238,7 +236,7 @@ mod test { } let mut v = Vec::new(); v.extend_from_slice(bb.as_slice()); - Block::new(DataSlice::new(v)).unwrap() + Block::new(v).unwrap() } fn build_ref(n: u32, skip: u32) -> Vec { diff --git a/src/reader/mod.rs b/src/reader/mod.rs index a530aad..3c10bb9 100644 --- a/src/reader/mod.rs +++ b/src/reader/mod.rs @@ -3,6 +3,7 @@ use crate::source::{DefaultSource, IterSource}; use crate::{Entry, Iter}; use integer_encoding::VarInt; pub(crate) mod block; +use crate::compression::CBuf; use memmap::{Mmap, MmapOptions}; use std::fs::File; use std::io::Cursor; @@ -92,14 +93,14 @@ impl> Reader { } } - fn index_iter(&self) -> block::BlockIter { + fn index_iter(&self) -> block::BlockIter>> { let mut off = self.metadata.index_block_offset; let d = &self.data.as_ref()[off..]; let (size, len_size) = usize::decode_var(d).unwrap(); let prelude = len_size + std::mem::size_of::(); // TODO read and verify CRC assert!(size + prelude == self.metadata.bytes_index_block); off += prelude; - block::Block::new(self.data.clone_range(off, size)) + block::Block::new(CBuf::Buf(self.data.clone_range(off, size))) .expect("bad block") .into_iter() } @@ -108,8 +109,8 @@ impl> Reader { pub struct ReaderIter> { reader: Reader, next_offset: usize, - index_iter: block::BlockIter, - data_iter: Option>, + index_iter: block::BlockIter>>, + data_iter: Option>>>, } impl> ReaderIter { @@ -124,7 +125,7 @@ impl> ReaderIter { let data_off = crc_off + std::mem::size_of::(); self.next_offset = data_off + size; self.data_iter.replace( - block::Block::new(self.reader.data.clone_range(data_off, size)) + block::Block::new(CBuf::Buf(self.reader.data.clone_range(data_off, size))) .expect("bad block") .into_iter(), ); -- 2.50.1