1use crate::{flatfile::FlatFile, seqno::SeqNoIndex, SharedMmap};
2use std::sync::Arc;
3
4pub struct SeqNoIter {
7 data: Arc<FlatFile>,
8 index: Arc<SeqNoIndex>,
9 seqno: usize,
10}
11
12impl SeqNoIter {
13 pub(crate) fn new(data: Arc<FlatFile>, index: Arc<SeqNoIndex>, seqno: usize) -> Self {
14 Self { data, index, seqno }
15 }
16
17 fn next_impl(&mut self) -> Option<SharedMmap> {
18 let offset = self.index.get_pointer_to_value(self.seqno)? as usize;
19 let next_offset = self
20 .index
21 .get_pointer_to_value(self.seqno + 1)
22 .map(|value| value as usize)
23 .unwrap_or_else(|| self.data.len());
24 let length = next_offset - offset;
25 let item = self.data.get_record_at_offset(offset, length)?;
26 self.seqno += 1;
27 Some(item)
28 }
29}
30
31impl Iterator for SeqNoIter {
32 type Item = SharedMmap;
33
34 fn next(&mut self) -> Option<Self::Item> {
35 self.next_impl()
36 }
37}