diff options
Diffstat (limited to '7zip/Compress/Huffman/HuffmanEncoder.h')
-rwxr-xr-x | 7zip/Compress/Huffman/HuffmanEncoder.h | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/7zip/Compress/Huffman/HuffmanEncoder.h b/7zip/Compress/Huffman/HuffmanEncoder.h deleted file mode 100755 index 76304a45..00000000 --- a/7zip/Compress/Huffman/HuffmanEncoder.h +++ /dev/null @@ -1,82 +0,0 @@ -// Compression/HuffmanEncoder.h - -#ifndef __COMPRESSION_HUFFMANENCODER_H -#define __COMPRESSION_HUFFMANENCODER_H - -#include "../../../Common/Types.h" - -namespace NCompression { -namespace NHuffman { - -const int kNumBitsInLongestCode = 20; - -struct CItem -{ - UInt32 Freq; - UInt32 Code; - UInt32 Dad; - UInt32 Len; -}; - -class CEncoder -{ -public: - UInt32 m_NumSymbols; // number of symbols in adwSymbol - - CItem *m_Items; - UInt32 *m_Heap; - UInt32 m_HeapSize; - Byte *m_Depth; - const Byte *m_ExtraBits; - UInt32 m_ExtraBase; - UInt32 m_MaxLength; - - UInt32 m_HeapLength; - UInt32 m_BitLenCounters[kNumBitsInLongestCode + 1]; - - UInt32 RemoveSmallest(); - bool Smaller(int n, int m); - void DownHeap(UInt32 k); - void GenerateBitLen(UInt32 maxCode, UInt32 heapMax); - void GenerateCodes(UInt32 maxCode); - - UInt32 m_BlockBitLength; - - void Free(); - -public: - - CEncoder(); - ~CEncoder(); - bool Create(UInt32 numSymbols, const Byte *extraBits, - UInt32 extraBase, UInt32 maxLength); - void StartNewBlock(); - - void AddSymbol(UInt32 symbol) { m_Items[symbol].Freq++; } - - UInt32 GetPrice(const Byte *length) const - { - UInt32 price = 0; - for (UInt32 i = 0; i < m_NumSymbols; i++) - { - price += length[i] * m_Items[i].Freq; - if (m_ExtraBits && i >= m_ExtraBase) - price += m_ExtraBits[i - m_ExtraBase] * m_Items[i].Freq; - } - return price; - }; - void SetFreq(UInt32 symbol, UInt32 value) { m_Items[symbol].Freq = value; }; - - void BuildTree(Byte *levels); - UInt32 GetBlockBitLength() const { return m_BlockBitLength; } - - template <class TBitEncoder> - void CodeOneValue(TBitEncoder *bitEncoder, UInt32 symbol) - { bitEncoder->WriteBits(m_Items[symbol].Code, m_Items[symbol].Len); } - - void ReverseBits(); -}; - -}} - -#endif |