aboutsummaryrefslogtreecommitdiff
path: root/CPP/7zip/Archive/7z/7zFolderInStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/Archive/7z/7zFolderInStream.h')
-rw-r--r--CPP/7zip/Archive/7z/7zFolderInStream.h61
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
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