// 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