Mercurial > vba-linux
view src/win32/7zip/7z/CPP/7zip/Common/FilterCoder.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line source
1 // FilterCoder.h3 #ifndef __FILTERCODER_H4 #define __FILTERCODER_H6 #include "../../Common/MyCom.h"7 #include "../ICoder.h"8 #include "../IPassword.h"10 #define MY_QUERYINTERFACE_ENTRY_AG(i, sub0, sub) if (iid == IID_ ## i) \11 { if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \12 *outObject = (void *)(i *)this; AddRef(); return S_OK; }14 class CFilterCoder:15 public ICompressCoder,16 // #ifdef _ST_MODE17 public ICompressSetInStream,18 public ISequentialInStream,19 public ICompressSetOutStream,20 public ISequentialOutStream,21 public IOutStreamFlush,22 // #endif24 #ifndef _NO_CRYPTO25 public ICryptoSetPassword,26 #endif27 #ifndef EXTRACT_ONLY28 public ICompressSetCoderProperties,29 public ICompressWriteCoderProperties,30 // public ICryptoResetSalt,31 public ICryptoResetInitVector,32 #endif33 public ICompressSetDecoderProperties2,34 public CMyUnknownImp35 {36 protected:37 Byte *_buffer;38 // #ifdef _ST_MODE39 CMyComPtr<ISequentialInStream> _inStream;40 CMyComPtr<ISequentialOutStream> _outStream;41 UInt32 _bufferPos;42 UInt32 _convertedPosBegin;43 UInt32 _convertedPosEnd;44 // #endif45 bool _outSizeIsDefined;46 UInt64 _outSize;47 UInt64 _nowPos64;49 HRESULT Init()50 {51 _nowPos64 = 0;52 _outSizeIsDefined = false;53 return Filter->Init();54 }56 CMyComPtr<ICryptoSetPassword> _setPassword;57 #ifndef EXTRACT_ONLY58 CMyComPtr<ICompressSetCoderProperties> _SetCoderProperties;59 CMyComPtr<ICompressWriteCoderProperties> _writeCoderProperties;60 // CMyComPtr<ICryptoResetSalt> _CryptoResetSalt;61 CMyComPtr<ICryptoResetInitVector> _CryptoResetInitVector;62 #endif63 CMyComPtr<ICompressSetDecoderProperties2> _setDecoderProperties;64 public:65 CMyComPtr<ICompressFilter> Filter;67 CFilterCoder();68 ~CFilterCoder();69 HRESULT WriteWithLimit(ISequentialOutStream *outStream, UInt32 size);70 bool NeedMore() const71 { return (!_outSizeIsDefined || (_nowPos64 < _outSize)); }73 public:74 MY_QUERYINTERFACE_BEGIN75 MY_QUERYINTERFACE_ENTRY(ICompressCoder)76 // #ifdef _ST_MODE77 MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)78 MY_QUERYINTERFACE_ENTRY(ISequentialInStream)80 MY_QUERYINTERFACE_ENTRY(ICompressSetOutStream)81 MY_QUERYINTERFACE_ENTRY(ISequentialOutStream)82 MY_QUERYINTERFACE_ENTRY(IOutStreamFlush)83 // #endif85 #ifndef _NO_CRYPTO86 MY_QUERYINTERFACE_ENTRY_AG(ICryptoSetPassword, Filter, _setPassword)87 #endif89 #ifndef EXTRACT_ONLY90 MY_QUERYINTERFACE_ENTRY_AG(ICompressSetCoderProperties, Filter, _SetCoderProperties)91 MY_QUERYINTERFACE_ENTRY_AG(ICompressWriteCoderProperties, Filter, _writeCoderProperties)92 // MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetSalt, Filter, _CryptoResetSalt)93 MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetInitVector, Filter, _CryptoResetInitVector)94 #endif96 MY_QUERYINTERFACE_ENTRY_AG(ICompressSetDecoderProperties2, Filter, _setDecoderProperties)97 MY_QUERYINTERFACE_END98 MY_ADDREF_RELEASE99 STDMETHOD(Code)(ISequentialInStream *inStream,100 ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize,101 ICompressProgressInfo *progress);102 // #ifdef _ST_MODE103 STDMETHOD(ReleaseInStream)();104 STDMETHOD(SetInStream)(ISequentialInStream *inStream);105 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); \106 STDMETHOD(SetOutStream)(ISequentialOutStream *outStream);107 STDMETHOD(ReleaseOutStream)();108 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);109 STDMETHOD(Flush)();110 // #endif112 #ifndef _NO_CRYPTO113 STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);114 #endif115 #ifndef EXTRACT_ONLY116 STDMETHOD(SetCoderProperties)(const PROPID *propIDs,117 const PROPVARIANT *properties, UInt32 numProperties);118 STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);119 // STDMETHOD(ResetSalt)();120 STDMETHOD(ResetInitVector)();121 #endif122 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);123 };125 // #ifdef _ST_MODE126 class CInStreamReleaser127 {128 public:129 CFilterCoder *FilterCoder;130 CInStreamReleaser(): FilterCoder(0) {}131 ~CInStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseInStream(); }132 };134 class COutStreamReleaser135 {136 public:137 CFilterCoder *FilterCoder;138 COutStreamReleaser(): FilterCoder(0) {}139 ~COutStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseOutStream(); }140 };141 // #endif143 #endif