Home | History | Annotate | Download | only in Compress
      1 // Lzma2Decoder.h
      2 
      3 #ifndef __LZMA2_DECODER_H
      4 #define __LZMA2_DECODER_H
      5 
      6 #include "../../../C/Lzma2Dec.h"
      7 
      8 #include "../../Common/MyCom.h"
      9 
     10 #include "../ICoder.h"
     11 
     12 namespace NCompress {
     13 namespace NLzma2 {
     14 
     15 class CDecoder:
     16   public ICompressCoder,
     17   public ICompressSetDecoderProperties2,
     18   public ICompressSetFinishMode,
     19   public ICompressGetInStreamProcessedSize,
     20   public ICompressSetBufSize,
     21   #ifndef NO_READ_FROM_CODER
     22   public ICompressSetInStream,
     23   public ICompressSetOutStreamSize,
     24   public ISequentialInStream,
     25   #endif
     26   public CMyUnknownImp
     27 {
     28   CMyComPtr<ISequentialInStream> _inStream;
     29   Byte *_inBuf;
     30   UInt32 _inPos;
     31   UInt32 _inSize;
     32 
     33   bool _finishMode;
     34   bool _outSizeDefined;
     35   UInt64 _outSize;
     36 
     37   UInt64 _inSizeProcessed;
     38   UInt64 _outSizeProcessed;
     39 
     40   UInt32 _inBufSize;
     41   UInt32 _inBufSizeNew;
     42   UInt32 _outStepSize;
     43 
     44   CLzma2Dec _state;
     45 public:
     46 
     47   MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
     48   MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)
     49   MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
     50   MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
     51   MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize)
     52   #ifndef NO_READ_FROM_CODER
     53   MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
     54   MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize)
     55   MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
     56   #endif
     57   MY_QUERYINTERFACE_END
     58   MY_ADDREF_RELEASE
     59 
     60   STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
     61       const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
     62 
     63   STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
     64 
     65   STDMETHOD(SetFinishMode)(UInt32 finishMode);
     66 
     67   STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
     68 
     69   STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
     70   STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
     71 
     72   STDMETHOD(SetInStream)(ISequentialInStream *inStream);
     73   STDMETHOD(ReleaseInStream)();
     74 
     75   STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
     76 
     77   #ifndef NO_READ_FROM_CODER
     78   STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
     79   #endif
     80 
     81   CDecoder();
     82   virtual ~CDecoder();
     83 
     84 };
     85 
     86 }}
     87 
     88 #endif
     89