LzmaDecoder.h revision baa3858d3f5d128a5c8466b700098109edcad5f2
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// LzmaDecoder.h 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant#ifndef __LZMA_DECODER_H 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define __LZMA_DECODER_H 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant#include "../../../C/LzmaDec.h" 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../Common/MyCom.h" 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../ICoder.h" 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace NCompress { 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace NLzma { 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass CDecoder: 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ICompressCoder, 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ICompressSetDecoderProperties2, 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ICompressSetBufSize, 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant #ifndef NO_READ_FROM_CODER 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ICompressSetInStream, 2083e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow public ICompressSetOutStreamSize, 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ISequentialInStream, 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant #endif 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public CMyUnknownImp 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant CMyComPtr<ISequentialInStream> _inStream; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Byte *_inBuf; 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt32 _inPos; 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt32 _inSize; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant CLzmaDec _state; 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool _propsWereSet; 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool _outSizeDefined; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt64 _outSize; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt64 _inSizeProcessed; 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt64 _outSizeProcessed; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt32 _inBufSizeAllocated; 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt32 _inBufSize; 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant UInt32 _outBufSize; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant SizeT _wrPos; 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant HRESULT CreateInputBuffer(); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant HRESULT CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void SetOutStreamSizeResume(const UInt64 *outSize); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MY_QUERYINTERFACE_BEGIN2(ICompressCoder) 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2) 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize) 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant #ifndef NO_READ_FROM_CODER 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MY_QUERYINTERFACE_ENTRY(ICompressSetInStream) 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize) 52 MY_QUERYINTERFACE_ENTRY(ISequentialInStream) 53 #endif 54 MY_QUERYINTERFACE_END 55 MY_ADDREF_RELEASE 56 57 STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, 58 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); 59 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); 60 STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); 61 STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size); 62 STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size); 63 64 #ifndef NO_READ_FROM_CODER 65 66 STDMETHOD(SetInStream)(ISequentialInStream *inStream); 67 STDMETHOD(ReleaseInStream)(); 68 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 69 70 HRESULT CodeResume(ISequentialOutStream *outStream, const UInt64 *outSize, ICompressProgressInfo *progress); 71 HRESULT ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize); 72 UInt64 GetInputProcessedSize() const { return _inSizeProcessed; } 73 74 #endif 75 76 bool FinishStream; 77 78 CDecoder(); 79 virtual ~CDecoder(); 80}; 81 82}} 83 84#endif 85