diff options
Diffstat (limited to 'CPP/7zip/Archive/7z/7zFolderInStream.h')
-rw-r--r-- | CPP/7zip/Archive/7z/7zFolderInStream.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/CPP/7zip/Archive/7z/7zFolderInStream.h b/CPP/7zip/Archive/7z/7zFolderInStream.h new file mode 100644 index 0000000..805db54 --- /dev/null +++ b/CPP/7zip/Archive/7z/7zFolderInStream.h | |||
@@ -0,0 +1,61 @@ | |||
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 | |||
14 | namespace NArchive { | ||
15 | namespace N7z { | ||
16 | |||
17 | class 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 | |||
37 | public: | ||
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 | ||