3
#ifndef __DEFLATE_DECODER_H
4
#define __DEFLATE_DECODER_H
6
#include "../../Common/MyCom.h"
10
#include "../Common/InBuffer.h"
12
#include "BitlDecoder.h"
13
#include "DeflateConst.h"
14
#include "HuffmanDecoder.h"
15
#include "LzOutWindow.h"
22
public ICompressCoder,
23
public ICompressGetInStreamProcessedSize,
24
#ifndef NO_READ_FROM_CODER
25
public ICompressSetInStream,
26
public ICompressSetOutStreamSize,
27
public ISequentialInStream,
31
CLzOutWindow m_OutWindowStream;
32
NBitl::CDecoder<CInBuffer> m_InBitStream;
33
NCompress::NHuffman::CDecoder<kNumHuffmanBits, kFixedMainTableSize> m_MainDecoder;
34
NCompress::NHuffman::CDecoder<kNumHuffmanBits, kFixedDistTableSize> m_DistDecoder;
35
NCompress::NHuffman::CDecoder<kNumHuffmanBits, kLevelTableSize> m_LevelDecoder;
37
UInt32 m_StoredBlockSize;
41
UInt32 _numDistLevels;
51
UInt32 ReadBits(int numBits);
53
bool DeCodeLevelTable(Byte *values, int numSymbols);
58
m_OutWindowStream.ReleaseStream();
62
HRESULT Flush() { return m_OutWindowStream.Flush(); }
68
CCoderReleaser(CCoder *coder): m_Coder(coder), NeedFlush(true) {}
73
m_Coder->ReleaseStreams();
76
friend class CCoderReleaser;
78
HRESULT CodeSpec(UInt32 curSize);
83
CCoder(bool deflate64Mode, bool deflateNSIS = false);
84
void SetKeepHistory(bool keepHistory) { _keepHistory = keepHistory; }
86
HRESULT CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream,
87
const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
89
#ifndef NO_READ_FROM_CODER
91
ICompressGetInStreamProcessedSize,
93
ICompressSetOutStreamSize,
98
ICompressGetInStreamProcessedSize)
101
STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
102
const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
104
STDMETHOD(SetInStream)(ISequentialInStream *inStream);
105
STDMETHOD(ReleaseInStream)();
106
STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
108
#ifndef NO_READ_FROM_CODER
109
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
112
// IGetInStreamProcessedSize
113
STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
116
class CCOMCoder : public CCoder
119
CCOMCoder(): CCoder(false) {}
122
class CNsisCOMCoder : public CCoder
125
CNsisCOMCoder(): CCoder(false, true) {}
128
class CCOMCoder64 : public CCoder
131
CCOMCoder64(): CCoder(true) {}