Mercurial > vba-linux
diff src/win32/7zip/7z/CPP/7zip/Compress/DeflateDecoder.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/win32/7zip/7z/CPP/7zip/Compress/DeflateDecoder.h Sat Mar 03 10:31:27 2012 -0600 1.3 @@ -0,0 +1,136 @@ 1.4 +// DeflateDecoder.h 1.5 + 1.6 +#ifndef __DEFLATE_DECODER_H 1.7 +#define __DEFLATE_DECODER_H 1.8 + 1.9 +#include "../../Common/MyCom.h" 1.10 + 1.11 +#include "../ICoder.h" 1.12 + 1.13 +#include "../Common/InBuffer.h" 1.14 + 1.15 +#include "BitlDecoder.h" 1.16 +#include "DeflateConst.h" 1.17 +#include "HuffmanDecoder.h" 1.18 +#include "LzOutWindow.h" 1.19 + 1.20 +namespace NCompress { 1.21 +namespace NDeflate { 1.22 +namespace NDecoder { 1.23 + 1.24 +class CCoder: 1.25 + public ICompressCoder, 1.26 + public ICompressGetInStreamProcessedSize, 1.27 + #ifndef NO_READ_FROM_CODER 1.28 + public ICompressSetInStream, 1.29 + public ICompressSetOutStreamSize, 1.30 + public ISequentialInStream, 1.31 + #endif 1.32 + public CMyUnknownImp 1.33 +{ 1.34 + CLzOutWindow m_OutWindowStream; 1.35 + NBitl::CDecoder<CInBuffer> m_InBitStream; 1.36 + NCompress::NHuffman::CDecoder<kNumHuffmanBits, kFixedMainTableSize> m_MainDecoder; 1.37 + NCompress::NHuffman::CDecoder<kNumHuffmanBits, kFixedDistTableSize> m_DistDecoder; 1.38 + NCompress::NHuffman::CDecoder<kNumHuffmanBits, kLevelTableSize> m_LevelDecoder; 1.39 + 1.40 + UInt32 m_StoredBlockSize; 1.41 + 1.42 + bool m_FinalBlock; 1.43 + bool m_StoredMode; 1.44 + UInt32 _numDistLevels; 1.45 + 1.46 + 1.47 + bool _deflateNSIS; 1.48 + bool _deflate64Mode; 1.49 + bool _keepHistory; 1.50 + Int32 _remainLen; 1.51 + UInt32 _rep0; 1.52 + bool _needReadTable; 1.53 + 1.54 + UInt32 ReadBits(int numBits); 1.55 + 1.56 + bool DeCodeLevelTable(Byte *values, int numSymbols); 1.57 + bool ReadTables(); 1.58 + 1.59 + void ReleaseStreams() 1.60 + { 1.61 + m_OutWindowStream.ReleaseStream(); 1.62 + ReleaseInStream(); 1.63 + } 1.64 + 1.65 + HRESULT Flush() { return m_OutWindowStream.Flush(); } 1.66 + class CCoderReleaser 1.67 + { 1.68 + CCoder *m_Coder; 1.69 + public: 1.70 + bool NeedFlush; 1.71 + CCoderReleaser(CCoder *coder): m_Coder(coder), NeedFlush(true) {} 1.72 + ~CCoderReleaser() 1.73 + { 1.74 + if (NeedFlush) 1.75 + m_Coder->Flush(); 1.76 + m_Coder->ReleaseStreams(); 1.77 + } 1.78 + }; 1.79 + friend class CCoderReleaser; 1.80 + 1.81 + HRESULT CodeSpec(UInt32 curSize); 1.82 +public: 1.83 + bool ZlibMode; 1.84 + Byte ZlibFooter[4]; 1.85 + 1.86 + CCoder(bool deflate64Mode, bool deflateNSIS = false); 1.87 + void SetKeepHistory(bool keepHistory) { _keepHistory = keepHistory; } 1.88 + 1.89 + HRESULT CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream, 1.90 + const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); 1.91 + 1.92 + #ifndef NO_READ_FROM_CODER 1.93 + MY_UNKNOWN_IMP4( 1.94 + ICompressGetInStreamProcessedSize, 1.95 + ICompressSetInStream, 1.96 + ICompressSetOutStreamSize, 1.97 + ISequentialInStream 1.98 + ) 1.99 + #else 1.100 + MY_UNKNOWN_IMP1( 1.101 + ICompressGetInStreamProcessedSize) 1.102 + #endif 1.103 + 1.104 + STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, 1.105 + const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); 1.106 + 1.107 + STDMETHOD(SetInStream)(ISequentialInStream *inStream); 1.108 + STDMETHOD(ReleaseInStream)(); 1.109 + STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); 1.110 + 1.111 + #ifndef NO_READ_FROM_CODER 1.112 + STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 1.113 + #endif 1.114 + 1.115 + // IGetInStreamProcessedSize 1.116 + STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); 1.117 +}; 1.118 + 1.119 +class CCOMCoder : public CCoder 1.120 +{ 1.121 +public: 1.122 + CCOMCoder(): CCoder(false) {} 1.123 +}; 1.124 + 1.125 +class CNsisCOMCoder : public CCoder 1.126 +{ 1.127 +public: 1.128 + CNsisCOMCoder(): CCoder(false, true) {} 1.129 +}; 1.130 + 1.131 +class CCOMCoder64 : public CCoder 1.132 +{ 1.133 +public: 1.134 + CCOMCoder64(): CCoder(true) {} 1.135 +}; 1.136 + 1.137 +}}} 1.138 + 1.139 +#endif