• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
WasFinished()48   bool WasFinished() const { return _index == _numFiles; }
49 
GetFullSize()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