Struct seq_data_file::SeqDataReader
source · pub struct SeqDataReader<Format: SeqDataFormat> { /* private fields */ }
Expand description
Reader for SeqData
Implementations§
source§impl<Format: SeqDataFormat> SeqDataReader<Format>
impl<Format: SeqDataFormat> SeqDataReader<Format>
sourcepub fn open<P: AsRef<Path>>(path: P) -> Result<(Self, Vec<u8>)>
pub fn open<P: AsRef<Path>>(path: P) -> Result<(Self, Vec<u8>)>
Open a SeqData for reading
Examples found in repository?
examples/run.rs (line 49)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
fn run_writer_reader<H: SeqDataFormat>(sdf_file: &Path) {
{
let header = vec![0x90; H::HEADER_SIZE];
let mut sdf = SeqDataWriter::<H>::create(&sdf_file, &header).unwrap();
sdf.append(DATA1).unwrap();
sdf.append(DATA2).unwrap();
sdf.append(DATA3).unwrap();
}
let mut pos = Vec::new();
{
let (mut sdf, _header) = SeqDataReader::<H>::open(&sdf_file).unwrap();
let (p1, r1) = sdf.next().unwrap().unwrap();
let (p2, r2) = sdf.next().unwrap().unwrap();
let (p3, r3) = sdf.next().unwrap().unwrap();
pos.push(p1);
pos.push(p2);
pos.push(p3);
assert_eq!(p1, 0);
assert_eq!(r1, DATA1);
assert_eq!(p2, 4 + DATA1.len() as u64);
assert_eq!(r2, DATA2);
assert_eq!(p3, 4 * 2 + DATA1.len() as u64 + DATA2.len() as u64);
assert_eq!(r3, DATA3);
if let Some(x) = sdf.next() {
panic!("more data than expected {:?}", x)
}
}
{
let (mut sdf, _header) = SeqDataReaderSeek::<H>::open(sdf_file).unwrap();
let r2 = sdf.next_at(pos[1]).unwrap();
assert_eq!(r2, DATA2);
let r1 = sdf.next_at(pos[0]).unwrap();
assert_eq!(r1, DATA1);
let r3 = sdf.next_at(pos[2]).unwrap();
assert_eq!(r3, DATA3);
}
}
pub fn len(&self) -> u64
pub fn position(&self) -> u64
sourcepub fn next(&mut self) -> Option<Result<(u64, Vec<u8>)>>
pub fn next(&mut self) -> Option<Result<(u64, Vec<u8>)>>
Return the next block along with the current offset if it exists, or None if reached the end of file.
Examples found in repository?
examples/run.rs (line 50)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
fn run_writer_reader<H: SeqDataFormat>(sdf_file: &Path) {
{
let header = vec![0x90; H::HEADER_SIZE];
let mut sdf = SeqDataWriter::<H>::create(&sdf_file, &header).unwrap();
sdf.append(DATA1).unwrap();
sdf.append(DATA2).unwrap();
sdf.append(DATA3).unwrap();
}
let mut pos = Vec::new();
{
let (mut sdf, _header) = SeqDataReader::<H>::open(&sdf_file).unwrap();
let (p1, r1) = sdf.next().unwrap().unwrap();
let (p2, r2) = sdf.next().unwrap().unwrap();
let (p3, r3) = sdf.next().unwrap().unwrap();
pos.push(p1);
pos.push(p2);
pos.push(p3);
assert_eq!(p1, 0);
assert_eq!(r1, DATA1);
assert_eq!(p2, 4 + DATA1.len() as u64);
assert_eq!(r2, DATA2);
assert_eq!(p3, 4 * 2 + DATA1.len() as u64 + DATA2.len() as u64);
assert_eq!(r3, DATA3);
if let Some(x) = sdf.next() {
panic!("more data than expected {:?}", x)
}
}
{
let (mut sdf, _header) = SeqDataReaderSeek::<H>::open(sdf_file).unwrap();
let r2 = sdf.next_at(pos[1]).unwrap();
assert_eq!(r2, DATA2);
let r1 = sdf.next_at(pos[0]).unwrap();
assert_eq!(r1, DATA1);
let r3 = sdf.next_at(pos[2]).unwrap();
assert_eq!(r3, DATA3);
}
}
Auto Trait Implementations§
impl<Format> Freeze for SeqDataReader<Format>
impl<Format> RefUnwindSafe for SeqDataReader<Format>where
Format: RefUnwindSafe,
impl<Format> Send for SeqDataReader<Format>where
Format: Send,
impl<Format> Sync for SeqDataReader<Format>where
Format: Sync,
impl<Format> Unpin for SeqDataReader<Format>where
Format: Unpin,
impl<Format> UnwindSafe for SeqDataReader<Format>where
Format: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more