1use crate::utils;
2use crate::Set;
3
4#[derive(Clone)]
6pub struct Decoder<'a> {
7 set: &'a Set,
8 dec: Vec<u8>,
9}
10
11impl<'a> Decoder<'a> {
12 pub fn new(set: &'a Set) -> Self {
18 Self {
19 set,
20 dec: Vec::with_capacity(set.max_length()),
21 }
22 }
23
24 pub fn run(&mut self, id: usize) -> Vec<u8> {
38 let (set, dec) = (&self.set, &mut self.dec);
39 assert!(id < set.len());
40
41 let (bi, bj) = (set.bucket_id(id), set.pos_in_bucket(id));
42 let mut pos = set.decode_header(bi, dec);
43
44 for _ in 0..bj {
45 let (lcp, num) = utils::vbyte::decode(&set.serialized[pos..]);
46 pos += num;
47
48 dec.resize(lcp, 0);
49 pos = set.decode_next(pos, dec);
50 }
51
52 dec.clone()
53 }
54}