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