Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / Archive / Rar / RarHandler.h
1 // Rar/Handler.h\r
2 \r
3 #ifndef __RAR_HANDLER_H\r
4 #define __RAR_HANDLER_H\r
5 \r
6 #include "../IArchive.h"\r
7 \r
8 #include "../../Common/CreateCoder.h"\r
9 \r
10 #include "RarIn.h"\r
11 #include "RarVolumeInStream.h"\r
12 \r
13 namespace NArchive {\r
14 namespace NRar {\r
15 \r
16 class CHandler:\r
17   public IInArchive,\r
18   PUBLIC_ISetCompressCodecsInfo\r
19   public CMyUnknownImp\r
20 {\r
21   CRecordVector<CRefItem> _refItems;\r
22   CObjectVector<CItemEx> _items;\r
23   CObjectVector<CInArchive> _archives;\r
24   NArchive::NRar::CInArchiveInfo _archiveInfo;\r
25   AString _errorMessage;\r
26 \r
27   DECL_EXTERNAL_CODECS_VARS\r
28 \r
29   UInt64 GetPackSize(int refIndex) const;\r
30 \r
31   bool IsSolid(int refIndex)\r
32   {\r
33     const CItemEx &item = _items[_refItems[refIndex].ItemIndex];\r
34     if (item.UnPackVersion < 20)\r
35     {\r
36       if (_archiveInfo.IsSolid())\r
37         return (refIndex > 0);\r
38       return false;\r
39     }\r
40     return item.IsSolid();\r
41   }\r
42   void AddErrorMessage(const AString &s)\r
43   {\r
44     if (!_errorMessage.IsEmpty())\r
45       _errorMessage += '\n';\r
46     _errorMessage += s;\r
47   }\r
48 \r
49   HRESULT Open2(IInStream *stream,\r
50       const UInt64 *maxCheckStartPosition,\r
51       IArchiveOpenCallback *openCallback);\r
52 \r
53 public:\r
54   MY_QUERYINTERFACE_BEGIN2(IInArchive)\r
55   QUERY_ENTRY_ISetCompressCodecsInfo\r
56   MY_QUERYINTERFACE_END\r
57   MY_ADDREF_RELEASE\r
58   \r
59   INTERFACE_IInArchive(;)\r
60 \r
61   DECL_ISetCompressCodecsInfo\r
62 };\r
63 \r
64 }}\r
65 \r
66 #endif\r