Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / Archive / Cab / CabItem.h
1 // Archive/CabItem.h\r
2 \r
3 #ifndef __ARCHIVE_CAB_ITEM_H\r
4 #define __ARCHIVE_CAB_ITEM_H\r
5 \r
6 #include "Common/Types.h"\r
7 #include "Common/MyString.h"\r
8 #include "CabHeader.h"\r
9 \r
10 namespace NArchive {\r
11 namespace NCab {\r
12 \r
13 struct CFolder\r
14 {\r
15   UInt32 DataStart; // offset of the first CFDATA block in this folder\r
16   UInt16 NumDataBlocks; // number of CFDATA blocks in this folder\r
17   Byte CompressionTypeMajor;\r
18   Byte CompressionTypeMinor;\r
19   Byte GetCompressionMethod() const { return (Byte)(CompressionTypeMajor & 0xF); }\r
20 };\r
21 \r
22 struct CItem\r
23 {\r
24   AString Name;\r
25   UInt32 Offset;\r
26   UInt32 Size;\r
27   UInt32 Time;\r
28   UInt16 FolderIndex;\r
29   UInt16 Flags;\r
30   UInt16 Attributes;\r
31   \r
32   UInt64 GetEndOffset() const { return (UInt64)Offset + Size; }\r
33   UInt32 GetWinAttributes() const { return (Attributes & ~NHeader::kFileNameIsUTFAttributeMask); }\r
34   bool IsNameUTF() const { return (Attributes & NHeader::kFileNameIsUTFAttributeMask) != 0; }\r
35   bool IsDir() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; }\r
36 \r
37   bool ContinuedFromPrev() const\r
38   {\r
39     return\r
40       (FolderIndex == NHeader::NFolderIndex::kContinuedFromPrev) ||\r
41       (FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext);\r
42   }\r
43   \r
44   bool ContinuedToNext() const\r
45   {\r
46     return\r
47       (FolderIndex == NHeader::NFolderIndex::kContinuedToNext) ||\r
48       (FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext);\r
49   }\r
50 \r
51   int GetFolderIndex(int numFolders) const\r
52   {\r
53     if (ContinuedFromPrev())\r
54       return 0;\r
55     if (ContinuedToNext())\r
56       return (numFolders - 1);\r
57     return FolderIndex;\r
58   }\r
59 };\r
60 \r
61 }}\r
62 \r
63 #endif\r