#![allow(dead_code)]
pub mod entry;
-use entry::Entry;
+pub use entry::Entry;
pub mod source;
-use source::Source;
+pub use source::IterSource;
+pub use source::Source;
pub mod iter;
use iter::Iter;
type Error = Box<dyn std::error::Error>;
type Result<T> = std::result::Result<T, Error>;
+
+pub mod prelude {
+ pub use super::entry::Entry;
+ pub use super::iter::Iter;
+ pub use super::reader::Reader;
+ pub use super::source::IterSource;
+ pub use super::source::Source;
+ pub use super::writer::Writer;
+}
impl<D: AsRef<[u8]>> Block<D> {
pub(crate) fn new(data: DataSlice<D>) -> Result<Self> {
- println!("Block::new( {:?} )", data.as_ref());
if data.as_ref().len() < size_of::<u32>() {
return Err("block data too short".into());
}
let rc_off = data.as_ref().len() - size_of::<u32>();
let restart_count = u32::from_be_bytes(data.as_ref()[rc_off..].try_into()?) as usize;
- println!("restart_count = {}", restart_count);
// try 32-bit restarts
if (restart_count * size_of::<u32>()) > rc_off {
Some(())
});
}
+ if self.cur_ent.is_none() && self.decode().is_none() {
+ // empty block?
+ return;
+ }
+ while self.cur_ent.as_ref().unwrap().key.as_slice() < key {
+ if self.decode().is_none() {
+ return;
+ }
+ }
}
}
let block_len = bb.len();
let block_data = bb.as_slice();
assert_eq!(block_data.len(), block_len);
- println!("Block: {:?}", block_data);
let bi = Block::new(DataSlice::new(bb.as_slice()))
.unwrap()
.into_iter();
-use mtbl::entry::Entry;
-use mtbl::reader::Reader;
-use mtbl::source::IterSource;
-use mtbl::writer::Writer;
+use mtbl::prelude::*;
#[test]
fn test_write_readback() {
}
assert!(store.len() > 512);
- let ri = Reader::new(&store).iter();
- assert_eq!(ri.collect::<Vec<Entry>>(), reference);
+ let r = Reader::new(&store);
+ let ri = r.iter();
+ assert_eq!(ri.collect::<Vec<_>>(), reference);
+
+ // test range
+ let rangei = r.get_range(&u32::to_be_bytes(3), &u32::to_be_bytes(5));
+ assert_eq!(
+ rangei.collect::<Vec<_>>(),
+ reference
+ .into_iter()
+ .filter(|e| e.key.as_slice() >= &u32::to_be_bytes(3)
+ && e.key.as_slice() <= &u32::to_be_bytes(5))
+ .collect::<Vec<_>>()
+ )
}