| // 7zFolderOutStream.h | |
| #ifndef __7Z_FOLDER_OUT_STREAM_H | |
| #define __7Z_FOLDER_OUT_STREAM_H | |
| #include "../../IStream.h" | |
| #include "../IArchive.h" | |
| #include "../Common/OutStreamWithCRC.h" | |
| #include "7zIn.h" | |
| namespace NArchive { | |
| namespace N7z { | |
| class CFolderOutStream: | |
| public ISequentialOutStream, | |
| public ICompressGetSubStreamSize, | |
| public CMyUnknownImp | |
| { | |
| COutStreamWithCRC *_crcStreamSpec; | |
| CMyComPtr<ISequentialOutStream> _crcStream; | |
| const CDbEx *_db; | |
| const CBoolVector *_extractStatuses; | |
| CMyComPtr<IArchiveExtractCallback> _extractCallback; | |
| UInt32 _ref2Offset; | |
| UInt32 _startIndex; | |
| unsigned _currentIndex; | |
| bool _testMode; | |
| bool _checkCrc; | |
| bool _fileIsOpen; | |
| UInt64 _rem; | |
| HRESULT OpenFile(); | |
| HRESULT CloseFileAndSetResult(Int32 res); | |
| HRESULT CloseFileAndSetResult(); | |
| HRESULT ProcessEmptyFiles(); | |
| public: | |
| MY_UNKNOWN_IMP1(ICompressGetSubStreamSize) | |
| CFolderOutStream(); | |
| STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); | |
| STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); | |
| HRESULT Init( | |
| const CDbEx *db, | |
| UInt32 ref2Offset, UInt32 startIndex, | |
| const CBoolVector *extractStatuses, | |
| IArchiveExtractCallback *extractCallback, | |
| bool testMode, bool checkCrc); | |
| HRESULT FlushCorrupted(Int32 resultEOperationResult); | |
| HRESULT WasWritingFinished() const | |
| { return (_currentIndex == _extractStatuses->Size()) ? S_OK: E_FAIL; } | |
| }; | |
| }} | |
| #endif |