FACT++  1.0
const uint8_t* Huffman::Decoder::Decode ( const uint8_t *  in_ptr,
const uint8_t *  in_end,
uint16_t *  out_ptr,
const uint16_t *  out_end 
) const
inline

Definition at line 288 of file huffman.h.

References isLeaf, lut, nbits, and symbol.

Referenced by Huffman::Decode().

290  {
291  Decoder const *p = this;
292 
293  if (in_ptr==in_end)
294  {
295  while (out_ptr < out_end)
296  *out_ptr++ = p->lut->symbol;
297  return in_ptr;
298  }
299 
300  uint8_t curbit = 0;
301  while (in_ptr<in_end && out_ptr<out_end)
302  {
303  const uint16_t *two = (uint16_t*)in_ptr;
304 
305  const uint8_t curbyte = (*two >> curbit);
306 
307 #ifdef __EXCEPTIONS
308  if (!p->lut)
309  throw std::runtime_error("Unknown bitcode in stream!");
310 #else
311  if (!p->lut)
312  return NULL;
313 #endif
314 
315  p = p->lut + curbyte;
316  if (!p->isLeaf)
317  {
318  in_ptr++;
319  continue;
320  }
321 
322  *out_ptr++ = p->symbol;
323  curbit += p->nbits;
324 
325  p = this;
326 
327  if (curbit>=8)
328  {
329  curbit %= 8;
330  in_ptr++;
331  }
332 
333  }
334 
335  return curbit ? in_ptr+1 : in_ptr;
336  }

+ Here is the caller graph for this function: