1use crate::Set;
2
3#[derive(Clone)]
5pub struct Iter<'a> {
6 set: &'a Set,
7 dec: Vec<u8>,
8 pos: usize,
9 id: usize,
10}
11
12impl<'a> Iter<'a> {
13 pub fn new(set: &'a Set) -> Self {
19 Self {
20 set,
21 dec: Vec::with_capacity(set.max_length()),
22 pos: 0,
23 id: 0,
24 }
25 }
26}
27
28impl<'a> Iterator for Iter<'a> {
29 type Item = (usize, Vec<u8>);
30
31 fn next(&mut self) -> Option<Self::Item> {
32 if self.pos == self.set.serialized.len() {
33 return None;
34 }
35 if self.set.pos_in_bucket(self.id) == 0 {
36 self.dec.clear();
37 } else {
38 let (lcp, next_pos) = self.set.decode_lcp(self.pos);
39 self.pos = next_pos;
40 self.dec.resize(lcp, 0);
41 }
42 self.pos = self.set.decode_next(self.pos, &mut self.dec);
43 self.id += 1;
44 Some((self.id - 1, self.dec.clone()))
45 }
46
47 fn size_hint(&self) -> (usize, Option<usize>) {
48 (self.set.len(), Some(self.set.len()))
49 }
50}