tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

PpmdDecoder.h (2195B)


      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  public ICompressGetInStreamProcessedSize,
     22  #ifndef NO_READ_FROM_CODER
     23  public ICompressSetInStream,
     24  public ICompressSetOutStreamSize,
     25  public ISequentialInStream,
     26  #endif
     27  public CMyUnknownImp
     28 {
     29  Byte *_outBuf;
     30  CPpmd7z_RangeDec _rangeDec;
     31  CByteInBufWrap _inStream;
     32  CPpmd7 _ppmd;
     33 
     34  Byte _order;
     35  bool _outSizeDefined;
     36  int _status;
     37  UInt64 _outSize;
     38  UInt64 _processedSize;
     39 
     40  HRESULT CodeSpec(Byte *memStream, UInt32 size);
     41 
     42 public:
     43 
     44  #ifndef NO_READ_FROM_CODER
     45  CMyComPtr<ISequentialInStream> InSeqStream;
     46  #endif
     47 
     48  MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
     49  MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)
     50  // MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
     51  MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
     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 
     61  STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
     62      const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
     63  STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
     64  STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
     65  
     66  STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
     67 
     68  #ifndef NO_READ_FROM_CODER
     69  STDMETHOD(SetInStream)(ISequentialInStream *inStream);
     70  STDMETHOD(ReleaseInStream)();
     71  STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
     72  #endif
     73 
     74  CDecoder(): _outBuf(NULL), _outSizeDefined(false)
     75  {
     76    Ppmd7z_RangeDec_CreateVTable(&_rangeDec);
     77    _rangeDec.Stream = &_inStream.vt;
     78    Ppmd7_Construct(&_ppmd);
     79  }
     80 
     81  ~CDecoder();
     82 };
     83 
     84 }}
     85 
     86 #endif