7zFolderInStream.h revision baa3858d3f5d128a5c8466b700098109edcad5f2
1// 7zFolderInStream.h 2 3#ifndef __7Z_FOLDER_IN_STREAM_H 4#define __7Z_FOLDER_IN_STREAM_H 5 6#include "../../ICoder.h" 7#include "../IArchive.h" 8#include "../Common/InStreamWithCRC.h" 9 10#include "7zItem.h" 11 12namespace NArchive { 13namespace N7z { 14 15class CFolderInStream: 16 public ISequentialInStream, 17 public ICompressGetSubStreamSize, 18 public CMyUnknownImp 19{ 20 CSequentialInStreamWithCRC *_inStreamWithHashSpec; 21 CMyComPtr<ISequentialInStream> _inStreamWithHash; 22 CMyComPtr<IArchiveUpdateCallback> _updateCallback; 23 24 bool _currentSizeIsDefined; 25 bool _fileIsOpen; 26 UInt64 _currentSize; 27 UInt64 _filePos; 28 const UInt32 *_fileIndices; 29 UInt32 _numFiles; 30 UInt32 _fileIndex; 31 32 HRESULT OpenStream(); 33 HRESULT CloseStream(); 34 void AddDigest(); 35 36public: 37 CRecordVector<bool> Processed; 38 CRecordVector<UInt32> CRCs; 39 CRecordVector<UInt64> Sizes; 40 41 MY_UNKNOWN_IMP1(ICompressGetSubStreamSize) 42 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 43 STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); 44 45 CFolderInStream(); 46 void Init(IArchiveUpdateCallback *updateCallback, const UInt32 *fileIndices, UInt32 numFiles); 47 UInt64 GetFullSize() const 48 { 49 UInt64 size = 0; 50 for (int i = 0; i < Sizes.Size(); i++) 51 size += Sizes[i]; 52 return size; 53 } 54}; 55 56}} 57 58#endif 59