use crate::utils;
use crate::Set;
#[derive(Clone)]
pub struct Decoder<'a> {
set: &'a Set,
dec: Vec<u8>,
}
impl<'a> Decoder<'a> {
pub fn new(set: &'a Set) -> Self {
Self {
set,
dec: Vec::with_capacity(set.max_length()),
}
}
pub fn run(&mut self, id: usize) -> Vec<u8> {
let (set, dec) = (&self.set, &mut self.dec);
assert!(id < set.len());
let (bi, bj) = (set.bucket_id(id), set.pos_in_bucket(id));
let mut pos = set.decode_header(bi, dec);
for _ in 0..bj {
let (lcp, num) = utils::vbyte::decode(&set.serialized[pos..]);
pos += num;
dec.resize(lcp, 0);
pos = set.decode_next(pos, dec);
}
dec.clone()
}
}