35 #ifndef AIMS_COMPRESSION_HUFFMAN_H
36 #define AIMS_COMPRESSION_HUFFMAN_H
44 #define NHUFFSYMBOLS ( 256 + 16 + 2 )
57 return tmp ? (tmp < 0): (x.
i - i < 0);
94 static void _addGroup(
int* groups,
int group,
int nBits );
107 enum { maxMatchOver = 517, maxRaw = 64 };
110 void putRaw(
const byte* src,
size_t sz );
111 void putMatch(
const byte* src,
size_t nRaw,
size_t matchOver,
size_t disp);
124 void _put(
ushort symbol );
125 void _put(
ushort symbol,
int codeBits,
uint code );
126 void _putBits(
int codeBits,
uint code );
151 : _stat( stat ), _sstat( stat->stat ), _nextStat( stat->nextStat )
153 _dst = _dstBegin = dst;
166 void LZHLEncoder::_putBits(
int codeBits,
uint code )
169 _bits |= ( code << ( 32 - _nBits - codeBits ) );
173 *_dst++ = (
byte)( _bits >> 24 );
174 *_dst++ = (
byte)( _bits >> 16 );
182 void LZHLEncoder::_put(
ushort symbol )
185 if ( --_nextStat <= 0 )
198 void LZHLEncoder::_put(
ushort symbol,
int codeBits,
uint code )
202 if ( --_nextStat <= 0 )
210 int nBits = item->
nBits;
211 _putBits( nBits + codeBits, ( item->
code << codeBits ) | code );
int _makeSortedTmp(HuffStatTmpStruct *)
void calcStat(int *groups)
LZHLEncoder(LZHLEncoderStat *stat, byte *dst)
void putMatch(const byte *src, size_t nRaw, size_t matchOver, size_t disp)
void putRaw(const byte *src, size_t sz)
static size_t calcMaxBuf(size_t rawSz)
bool operator<(const HuffStatTmpStruct &x)