X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-core%2Fsrc%2Fcompr%2Fdeflate.rs;h=b1266619b87d5b05228dfd21d1d61904e195bef8;hp=2509fc229116d5376a8aff2d65e1e7182079507b;hb=bc23de6bedc2e151caea241b073a65d30f62c134;hpb=80da4ff8ba4b8ae0a1abd0e34bb3647785606201 diff --git a/nihav-core/src/compr/deflate.rs b/nihav-core/src/compr/deflate.rs index 2509fc2..b126661 100644 --- a/nihav-core/src/compr/deflate.rs +++ b/nihav-core/src/compr/deflate.rs @@ -356,6 +356,14 @@ impl Inflate { self.full_pos += len; Ok(()) } + ///! Sets custom history for decoding an update for already decoded data. + pub fn set_dict(&mut self, dict: &[u8]) { + let len = dict.len().min(self.buf.len()); + let start = dict.len() - len; + self.buf[..len].copy_from_slice(&dict[start..]); + self.bpos = len; + self.full_pos = len; + } ///! Reports whether decoder has finished decoding the input. pub fn is_finished(&self) -> bool { match self.state { @@ -1654,7 +1662,7 @@ impl LZParse for OptimalParser { } dst.reserve(src.len()); - self.trellis.truncate(0); + self.trellis.clear(); self.trellis.reserve(src.len() + 1); for _ in 0..=src.len() { self.trellis.push(TNode::default()); @@ -1897,7 +1905,7 @@ impl Deflate { Mode::Fixed => { wr.write(final_block as u16, 1); wr.write(1, 2); - self.tokens.truncate(0); + self.tokens.clear(); self.parser.parse(&self.srcbuf[..self.ssize], &mut self.tokens); let mut codes = CodeHuff::new(true); codes.make_codes(&self.tokens); @@ -1908,7 +1916,7 @@ impl Deflate { Mode::Dynamic => { wr.write(final_block as u16, 1); wr.write(2, 2); - self.tokens.truncate(0); + self.tokens.clear(); self.parser.parse(&self.srcbuf[..self.ssize], &mut self.tokens); let mut codes = CodeHuff::new(false); codes.make_codes(&self.tokens);