tor-browser

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

Bcj2Coder.h (3306B)


      1 // Bcj2Coder.h
      2 
      3 #ifndef __COMPRESS_BCJ2_CODER_H
      4 #define __COMPRESS_BCJ2_CODER_H
      5 
      6 #include "../../../C/Bcj2.h"
      7 
      8 #include "../../Common/MyCom.h"
      9 
     10 #include "../ICoder.h"
     11 
     12 namespace NCompress {
     13 namespace NBcj2 {
     14 
     15 class CBaseCoder
     16 {
     17 protected:
     18  Byte *_bufs[BCJ2_NUM_STREAMS + 1];
     19  UInt32 _bufsCurSizes[BCJ2_NUM_STREAMS + 1];
     20  UInt32 _bufsNewSizes[BCJ2_NUM_STREAMS + 1];
     21 
     22  HRESULT Alloc(bool allocForOrig = true);
     23 public:
     24  CBaseCoder();
     25  ~CBaseCoder();
     26 };
     27 
     28 
     29 #ifndef EXTRACT_ONLY
     30 
     31 class CEncoder:
     32  public ICompressCoder2,
     33  public ICompressSetCoderProperties,
     34  public ICompressSetBufSize,
     35  public CMyUnknownImp,
     36  public CBaseCoder
     37 {
     38  UInt32 _relatLim;
     39 
     40  HRESULT CodeReal(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
     41      ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
     42      ICompressProgressInfo *progress);
     43 
     44 public:
     45  MY_UNKNOWN_IMP3(ICompressCoder2, ICompressSetCoderProperties, ICompressSetBufSize)
     46 
     47  STDMETHOD(Code)(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
     48      ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
     49      ICompressProgressInfo *progress);
     50 
     51  STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
     52  
     53  STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
     54  STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
     55  
     56  CEncoder();
     57  ~CEncoder();
     58 };
     59 
     60 #endif
     61 
     62 class CDecoder:
     63  public ICompressCoder2,
     64  public ICompressSetFinishMode,
     65  public ICompressGetInStreamProcessedSize2,
     66  public ICompressSetInStream2,
     67  public ISequentialInStream,
     68  public ICompressSetOutStreamSize,
     69  public ICompressSetBufSize,
     70  public CMyUnknownImp,
     71  public CBaseCoder
     72 {
     73  unsigned _extraReadSizes[BCJ2_NUM_STREAMS];
     74  UInt64 _inStreamsProcessed[BCJ2_NUM_STREAMS];
     75  HRESULT _readRes[BCJ2_NUM_STREAMS];
     76  CMyComPtr<ISequentialInStream> _inStreams[BCJ2_NUM_STREAMS];
     77 
     78  bool _finishMode;
     79  bool _outSizeDefined;
     80  UInt64 _outSize;
     81  UInt64 _outSize_Processed;
     82  CBcj2Dec dec;
     83 
     84  void InitCommon();
     85  // HRESULT ReadSpec();
     86  
     87 public:
     88  MY_UNKNOWN_IMP7(
     89    ICompressCoder2,
     90    ICompressSetFinishMode,
     91    ICompressGetInStreamProcessedSize2,
     92    ICompressSetInStream2,
     93    ISequentialInStream,
     94    ICompressSetOutStreamSize,
     95    ICompressSetBufSize
     96    );
     97  
     98  STDMETHOD(Code)(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
     99      ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
    100      ICompressProgressInfo *progress);
    101 
    102  STDMETHOD(SetFinishMode)(UInt32 finishMode);
    103  STDMETHOD(GetInStreamProcessedSize2)(UInt32 streamIndex, UInt64 *value);
    104 
    105  STDMETHOD(SetInStream2)(UInt32 streamIndex, ISequentialInStream *inStream);
    106  STDMETHOD(ReleaseInStream2)(UInt32 streamIndex);
    107 
    108  STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
    109 
    110  STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
    111 
    112  STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
    113  STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
    114 
    115  CDecoder();
    116 };
    117 
    118 }}
    119 
    120 #endif