1// 7zFolderInStream.h 2 3#ifndef __7Z_FOLDER_IN_STREAM_H 4#define __7Z_FOLDER_IN_STREAM_H 5 6#include "../../../../C/7zCrc.h" 7 8#include "../../../Common/MyCom.h" 9#include "../../../Common/MyVector.h" 10 11#include "../../ICoder.h" 12#include "../IArchive.h" 13 14namespace NArchive { 15namespace N7z { 16 17class CFolderInStream: 18 public ISequentialInStream, 19 public ICompressGetSubStreamSize, 20 public CMyUnknownImp 21{ 22 CMyComPtr<ISequentialInStream> _stream; 23 UInt64 _pos; 24 UInt32 _crc; 25 bool _size_Defined; 26 UInt64 _size; 27 28 const UInt32 *_indexes; 29 unsigned _numFiles; 30 unsigned _index; 31 32 CMyComPtr<IArchiveUpdateCallback> _updateCallback; 33 34 HRESULT OpenStream(); 35 void AddFileInfo(bool isProcessed); 36 37public: 38 CRecordVector<bool> Processed; 39 CRecordVector<UInt32> CRCs; 40 CRecordVector<UInt64> Sizes; 41 42 MY_UNKNOWN_IMP2(ISequentialInStream, ICompressGetSubStreamSize) 43 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 44 STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); 45 46 void Init(IArchiveUpdateCallback *updateCallback, const UInt32 *indexes, unsigned numFiles); 47 48 bool WasFinished() const { return _index == _numFiles; } 49 50 UInt64 GetFullSize() const 51 { 52 UInt64 size = 0; 53 FOR_VECTOR (i, Sizes) 54 size += Sizes[i]; 55 return size; 56 } 57}; 58 59}} 60 61#endif 62