Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / Compress / ImplodeHuffmanDecoder.h
1 // ImplodeHuffmanDecoder.h\r
2 \r
3 #ifndef __IMPLODE_HUFFMAN_DECODER_H\r
4 #define __IMPLODE_HUFFMAN_DECODER_H\r
5 \r
6 #include "../Common/InBuffer.h"\r
7 \r
8 #include "BitlDecoder.h"\r
9 \r
10 namespace NCompress {\r
11 namespace NImplode {\r
12 namespace NHuffman {\r
13 \r
14 const int kNumBitsInLongestCode = 16;\r
15 \r
16 typedef NBitl::CDecoder<CInBuffer> CInBit;\r
17 \r
18 class CDecoder\r
19 {\r
20   UInt32 m_Limitits[kNumBitsInLongestCode + 2]; // m_Limitits[i] = value limit for symbols with length = i\r
21   UInt32 m_Positions[kNumBitsInLongestCode + 2];   // m_Positions[i] = index in m_Symbols[] of first symbol with length = i\r
22   UInt32 m_NumSymbols; // number of symbols in m_Symbols\r
23   UInt32 *m_Symbols; // symbols: at first with len=1 then 2, ... 15.\r
24 public:\r
25   CDecoder(UInt32 numSymbols);\r
26   ~CDecoder();\r
27   \r
28   bool SetCodeLengths(const Byte *codeLengths);\r
29   UInt32 DecodeSymbol(CInBit *inStream);\r
30 };\r
31 \r
32 }}}\r
33 \r
34 #endif\r