tor-browser

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

XzDecoder.h (2168B)


      1 // XzDecoder.h
      2 
      3 #ifndef __XZ_DECODER_H
      4 #define __XZ_DECODER_H
      5 
      6 #include "../../../C/Xz.h"
      7 
      8 #include "../../Common/MyCom.h"
      9 
     10 #include "../ICoder.h"
     11 
     12 namespace NCompress {
     13 namespace NXz {
     14 
     15 struct CDecoder
     16 {
     17  CXzDecMtHandle xz;
     18  int _tryMt;
     19  UInt32 _numThreads;
     20  UInt64 _memUsage;
     21 
     22  SRes MainDecodeSRes; // it's not HRESULT
     23  bool MainDecodeSRes_wasUsed;
     24  CXzStatInfo Stat;
     25 
     26  CDecoder():
     27      xz(NULL),
     28      _tryMt(True),
     29      _numThreads(1),
     30      _memUsage((UInt64)(sizeof(size_t)) << 28),
     31      MainDecodeSRes(SZ_OK),
     32      MainDecodeSRes_wasUsed(false)
     33    {}
     34  
     35  ~CDecoder()
     36  {
     37    if (xz)
     38      XzDecMt_Destroy(xz);
     39  }
     40 
     41  /* Decode() can return ERROR code only if there is progress or stream error.
     42     Decode() returns S_OK in case of xz decoding error, but DecodeRes and CStatInfo contain error information */
     43  HRESULT Decode(ISequentialInStream *seqInStream, ISequentialOutStream *outStream,
     44      const UInt64 *outSizeLimit, bool finishStream, ICompressProgressInfo *compressProgress);
     45 };
     46 
     47 
     48 class CComDecoder:
     49  public ICompressCoder,
     50  public ICompressSetFinishMode,
     51  public ICompressGetInStreamProcessedSize,
     52 
     53  #ifndef _7ZIP_ST
     54  public ICompressSetCoderMt,
     55  public ICompressSetMemLimit,
     56  #endif
     57 
     58  public CMyUnknownImp,
     59  public CDecoder
     60 {
     61  bool _finishStream;
     62 
     63 public:
     64  MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
     65 
     66  MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
     67  MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
     68 
     69  #ifndef _7ZIP_ST
     70  MY_QUERYINTERFACE_ENTRY(ICompressSetCoderMt)
     71  MY_QUERYINTERFACE_ENTRY(ICompressSetMemLimit)
     72  #endif
     73  
     74  MY_QUERYINTERFACE_END
     75  MY_ADDREF_RELEASE
     76 
     77  STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
     78      const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
     79  STDMETHOD(SetFinishMode)(UInt32 finishMode);
     80  STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
     81 
     82  #ifndef _7ZIP_ST
     83  STDMETHOD(SetNumberOfThreads)(UInt32 numThreads);
     84  STDMETHOD(SetMemLimit)(UInt64 memUsage);
     85  #endif
     86 
     87  CComDecoder(): _finishStream(false) {}
     88 };
     89 
     90 }}
     91 
     92 #endif