X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fio%2Fcodebook.rs;h=5bfd71991e186cfe7c855d2ce11411e1d27d8a59;hb=b7b96b4cabbde72f05d0464299bf7fdf74d6480c;hp=c867c27efa11a29c9cc76b58d15140df53830641;hpb=26af5ca8242870eed88107e49de3737c4b631015;p=nihav.git diff --git a/src/io/codebook.rs b/src/io/codebook.rs index c867c27..5bfd719 100644 --- a/src/io/codebook.rs +++ b/src/io/codebook.rs @@ -181,7 +181,7 @@ fn build_esc_lut(table: &mut Vec, for (_, sec_bucket) in &escape_list { build_esc_lut(table, mode, sec_bucket)?; } - + Ok(()) } @@ -309,6 +309,25 @@ impl CodebookDescReader for ShortCodebookDescReader { fn len(&mut self) -> usize { self.data.len() } } +pub struct TableCodebookDescReader { + bits: &'static [u8], + codes: &'static [CodeType], + idx_map: fn(usize) -> IndexType, +} + +impl<'a, CodeType, IndexType> TableCodebookDescReader { + pub fn new(codes: &'static [CodeType], bits: &'static [u8], idx_map: fn(usize) -> IndexType) -> Self { + Self { bits, codes, idx_map } + } +} +impl, IndexType> CodebookDescReader for TableCodebookDescReader +{ + fn bits(&mut self, idx: usize) -> u8 { self.bits[idx] } + fn code(&mut self, idx: usize) -> u32 { self.codes[idx].into() } + fn sym (&mut self, idx: usize) -> IndexType { (self.idx_map)(idx) } + fn len(&mut self) -> usize { self.bits.len() } +} + #[cfg(test)] mod test { use super::*;