tor-browser

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

7zEncode.h (2123B)


      1 // 7zEncode.h
      2 
      3 #ifndef __7Z_ENCODE_H
      4 #define __7Z_ENCODE_H
      5 
      6 #include "7zCompressionMode.h"
      7 
      8 #include "../Common/CoderMixer2.h"
      9 
     10 #include "7zItem.h"
     11 
     12 namespace NArchive {
     13 namespace N7z {
     14 
     15 class CMtEncMultiProgress:
     16  public ICompressProgressInfo,
     17  public CMyUnknownImp
     18 {
     19  CMyComPtr<ICompressProgressInfo> _progress;
     20  #ifndef _7ZIP_ST
     21  NWindows::NSynchronization::CCriticalSection CriticalSection;
     22  #endif
     23 
     24 public:
     25  UInt64 OutSize;
     26 
     27  CMtEncMultiProgress(): OutSize(0) {}
     28 
     29  void Init(ICompressProgressInfo *progress);
     30 
     31  void AddOutSize(UInt64 addOutSize)
     32  {
     33    #ifndef _7ZIP_ST
     34    NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
     35    #endif
     36    OutSize += addOutSize;
     37  }
     38 
     39  MY_UNKNOWN_IMP1(ICompressProgressInfo)
     40 
     41  STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
     42 };
     43 
     44 class CEncoder
     45 {
     46  #ifdef USE_MIXER_ST
     47    NCoderMixer2::CMixerST *_mixerST;
     48  #endif
     49  #ifdef USE_MIXER_MT
     50    NCoderMixer2::CMixerMT *_mixerMT;
     51  #endif
     52  
     53  NCoderMixer2::CMixer *_mixer;
     54  CMyComPtr<IUnknown> _mixerRef;
     55 
     56  CCompressionMethodMode _options;
     57  NCoderMixer2::CBindInfo _bindInfo;
     58  CRecordVector<CMethodId> _decompressionMethods;
     59 
     60  CRecordVector<UInt32> _SrcIn_to_DestOut;
     61  CRecordVector<UInt32> _SrcOut_to_DestIn;
     62  // CRecordVector<UInt32> _DestIn_to_SrcOut;
     63  CRecordVector<UInt32> _DestOut_to_SrcIn;
     64 
     65  void InitBindConv();
     66  void SetFolder(CFolder &folder);
     67 
     68  HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS
     69      const UInt64 *inSizeForReduce);
     70 
     71  bool _constructed;
     72 public:
     73 
     74  CEncoder(const CCompressionMethodMode &options);
     75  ~CEncoder();
     76  HRESULT EncoderConstr();
     77  HRESULT Encode(
     78      DECL_EXTERNAL_CODECS_LOC_VARS
     79      ISequentialInStream *inStream,
     80      // const UInt64 *inStreamSize,
     81      const UInt64 *inSizeForReduce,
     82      CFolder &folderItem,
     83      CRecordVector<UInt64> &coderUnpackSizes,
     84      UInt64 &unpackSize,
     85      ISequentialOutStream *outStream,
     86      CRecordVector<UInt64> &packSizes,
     87      ICompressProgressInfo *compressProgress);
     88 };
     89 
     90 }}
     91 
     92 #endif