Home | History | Annotate | Download | only in Compress
      1 // PpmdDecoder.h
      2 // 2009-03-11 : Igor Pavlov : Public domain
      3 
      4 #ifndef __COMPRESS_PPMD_DECODER_H
      5 #define __COMPRESS_PPMD_DECODER_H
      6 
      7 #include "../../../C/Ppmd7.h"
      8 
      9 #include "../../Common/MyCom.h"
     10 
     11 #include "../Common/CWrappers.h"
     12 
     13 #include "../ICoder.h"
     14 
     15 namespace NCompress {
     16 namespace NPpmd {
     17 
     18 class CDecoder :
     19   public ICompressCoder,
     20   public ICompressSetDecoderProperties2,
     21   #ifndef NO_READ_FROM_CODER
     22   public ICompressSetInStream,
     23   public ICompressSetOutStreamSize,
     24   public ISequentialInStream,
     25   #endif
     26   public CMyUnknownImp
     27 {
     28   Byte *_outBuf;
     29   CPpmd7z_RangeDec _rangeDec;
     30   CByteInBufWrap _inStream;
     31   CPpmd7 _ppmd;
     32 
     33   Byte _order;
     34   bool _outSizeDefined;
     35   int _status;
     36   UInt64 _outSize;
     37   UInt64 _processedSize;
     38 
     39   HRESULT CodeSpec(Byte *memStream, UInt32 size);
     40 
     41 public:
     42 
     43   #ifndef NO_READ_FROM_CODER
     44   CMyComPtr<ISequentialInStream> InSeqStream;
     45   MY_UNKNOWN_IMP4(
     46       ICompressSetDecoderProperties2,
     47       ICompressSetInStream,
     48       ICompressSetOutStreamSize,
     49       ISequentialInStream)
     50   #else
     51   MY_UNKNOWN_IMP1(
     52       ICompressSetDecoderProperties2)
     53   #endif
     54 
     55   STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
     56       const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
     57   STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
     58   STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
     59 
     60   #ifndef NO_READ_FROM_CODER
     61   STDMETHOD(SetInStream)(ISequentialInStream *inStream);
     62   STDMETHOD(ReleaseInStream)();
     63   STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
     64   #endif
     65 
     66   CDecoder(): _outBuf(NULL), _outSizeDefined(false)
     67   {
     68     Ppmd7z_RangeDec_CreateVTable(&_rangeDec);
     69     _rangeDec.Stream = &_inStream.p;
     70     Ppmd7_Construct(&_ppmd);
     71   }
     72 
     73   ~CDecoder();
     74 };
     75 
     76 }}
     77 
     78 #endif
     79