MCPcopy Create free account
hub / github.com/AdRoll/rustenstein / huff_expand

Function huff_expand

src/cache.rs:330–362  ·  view source on GitHub ↗
(huff: &[(u16, u16)], source: &[u8], length: usize)

Source from the content-addressed store, hash-verified

328}
329
330fn huff_expand(huff: &[(u16, u16)], source: &[u8], length: usize) -> Vec<u8> {
331 let mut dest: Vec<u8> = Vec::new();
332 let headptr = 254; // head node is always node 254
333 let mut huffptr = headptr;
334 let mut i = 0;
335
336 let mut mask = 1;
337 let mut nodeval;
338
339 loop {
340 if (source[i] & mask) == 0 {
341 nodeval = huff[huffptr].0;
342 } else {
343 nodeval = huff[huffptr].1;
344 }
345 if mask == 0x80 {
346 i += 1;
347 mask = 1;
348 } else {
349 mask <<= 1;
350 }
351 if nodeval < 256 {
352 dest.push(nodeval.try_into().unwrap());
353 huffptr = headptr;
354 if dest.len() >= length {
355 break;
356 }
357 } else {
358 huffptr = nodeval as usize - 256;
359 }
360 }
361 dest
362}
363
364fn load_graphic(source: &[u8], headers: &[u32], huff: &[(u16, u16)], chunk: usize) -> Vec<u8> {
365 let pos = headers[chunk] as usize;

Callers 2

initFunction · 0.85
load_graphicFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected