6 #include "../../../Common/Buffer.h"
7 #include "7zMethodID.h"
16 CByteBuffer Properties
;
20 const CNum kNumMax
= 0x7FFFFFFF;
21 const CNum kNumNoIndex
= 0xFFFFFFFF;
27 CObjectVector
<CAltCoderInfo
> AltCoders
;
28 bool IsSimpleCoder() const { return (NumInStreams
== 1) && (NumOutStreams
== 1); }
39 CObjectVector
<CCoderInfo
> Coders
;
40 CRecordVector
<CBindPair
> BindPairs
;
41 CRecordVector
<CNum
> PackStreams
;
42 CRecordVector
<UInt64
> UnPackSizes
;
44 bool UnPackCRCDefined
;
46 CFolder(): UnPackCRCDefined(false) {}
48 UInt64
GetUnPackSize() const // test it
50 if (UnPackSizes
.IsEmpty())
52 for (int i
= UnPackSizes
.Size() - 1; i
>= 0; i
--)
53 if (FindBindPairForOutStream(i
) < 0)
54 return UnPackSizes
[i
];
58 CNum
GetNumOutStreams() const
61 for (int i
= 0; i
< Coders
.Size(); i
++)
62 result
+= Coders
[i
].NumOutStreams
;
66 int FindBindPairForInStream(CNum inStreamIndex
) const
68 for(int i
= 0; i
< BindPairs
.Size(); i
++)
69 if (BindPairs
[i
].InIndex
== inStreamIndex
)
73 int FindBindPairForOutStream(CNum outStreamIndex
) const
75 for(int i
= 0; i
< BindPairs
.Size(); i
++)
76 if (BindPairs
[i
].OutIndex
== outStreamIndex
)
80 int FindPackStreamArrayIndex(CNum inStreamIndex
) const
82 for(int i
= 0; i
< PackStreams
.Size(); i
++)
83 if (PackStreams
[i
] == inStreamIndex
)
89 typedef FILETIME CArchiveFileTime
;
94 CArchiveFileTime CreationTime
;
95 CArchiveFileTime LastWriteTime
;
96 CArchiveFileTime LastAccessTime
;
103 bool HasStream
; // Test it !!! it means that there is
104 // stream in some folder. It can be empty stream
107 bool IsFileCRCDefined
;
108 bool AreAttributesDefined
;
109 bool IsCreationTimeDefined
;
110 bool IsLastWriteTimeDefined
;
111 bool IsLastAccessTimeDefined
;
112 bool IsStartPosDefined
;
115 const bool HasStream() const {
116 return !IsDirectory && !IsAnti && UnPackSize != 0; }
122 IsFileCRCDefined(false),
123 AreAttributesDefined(false),
124 IsCreationTimeDefined(false),
125 IsLastWriteTimeDefined(false),
126 IsLastAccessTimeDefined(false),
127 IsStartPosDefined(false)
129 void SetAttributes(UInt32 attributes
)
131 AreAttributesDefined
= true;
132 Attributes
= attributes
;
134 void SetCreationTime(const CArchiveFileTime
&creationTime
)
136 IsCreationTimeDefined
= true;
137 CreationTime
= creationTime
;
139 void SetLastWriteTime(const CArchiveFileTime
&lastWriteTime
)
141 IsLastWriteTimeDefined
= true;
142 LastWriteTime
= lastWriteTime
;
144 void SetLastAccessTime(const CArchiveFileTime
&lastAccessTime
)
146 IsLastAccessTimeDefined
= true;
147 LastAccessTime
= lastAccessTime
;
151 struct CArchiveDatabase
153 CRecordVector
<UInt64
> PackSizes
;
154 CRecordVector
<bool> PackCRCsDefined
;
155 CRecordVector
<UInt32
> PackCRCs
;
156 CObjectVector
<CFolder
> Folders
;
157 CRecordVector
<CNum
> NumUnPackStreamsVector
;
158 CObjectVector
<CFileItem
> Files
;
162 PackCRCsDefined
.Clear();
165 NumUnPackStreamsVector
.Clear();
170 return (PackSizes
.IsEmpty() &&
171 PackCRCsDefined
.IsEmpty() &&
172 PackCRCs
.IsEmpty() &&
174 NumUnPackStreamsVector
.IsEmpty() &&