6 #include "../../../Common/Buffer.h"
7 #include "../../../Common/MyString.h"
8 #include "../../Common/MethodId.h"
15 const CNum kNumMax = 0x7FFFFFFF;
16 const CNum kNumNoIndex = 0xFFFFFFFF;
21 CByteBuffer Properties;
24 bool IsSimpleCoder() const { return (NumInStreams == 1) && (NumOutStreams == 1); }
35 CObjectVector<CCoderInfo> Coders;
36 CRecordVector<CBindPair> BindPairs;
37 CRecordVector<CNum> PackStreams;
38 CRecordVector<UInt64> UnPackSizes;
40 bool UnPackCRCDefined;
42 CFolder(): UnPackCRCDefined(false) {}
44 UInt64 GetUnPackSize() const // test it
46 if (UnPackSizes.IsEmpty())
48 for (int i = UnPackSizes.Size() - 1; i >= 0; i--)
49 if (FindBindPairForOutStream(i) < 0)
50 return UnPackSizes[i];
54 CNum GetNumOutStreams() const
57 for (int i = 0; i < Coders.Size(); i++)
58 result += Coders[i].NumOutStreams;
62 int FindBindPairForInStream(CNum inStreamIndex) const
64 for(int i = 0; i < BindPairs.Size(); i++)
65 if (BindPairs[i].InIndex == inStreamIndex)
69 int FindBindPairForOutStream(CNum outStreamIndex) const
71 for(int i = 0; i < BindPairs.Size(); i++)
72 if (BindPairs[i].OutIndex == outStreamIndex)
76 int FindPackStreamArrayIndex(CNum inStreamIndex) const
78 for(int i = 0; i < PackStreams.Size(); i++)
79 if (PackStreams[i] == inStreamIndex)
85 typedef FILETIME CArchiveFileTime;
90 CArchiveFileTime CreationTime;
91 CArchiveFileTime LastWriteTime;
92 CArchiveFileTime LastAccessTime;
99 bool HasStream; // Test it !!! it means that there is
100 // stream in some folder. It can be empty stream
103 bool IsFileCRCDefined;
104 bool AreAttributesDefined;
105 bool IsCreationTimeDefined;
106 bool IsLastWriteTimeDefined;
107 bool IsLastAccessTimeDefined;
108 bool IsStartPosDefined;
111 const bool HasStream() const {
112 return !IsDirectory && !IsAnti && UnPackSize != 0; }
118 IsFileCRCDefined(false),
119 AreAttributesDefined(false),
120 IsCreationTimeDefined(false),
121 IsLastWriteTimeDefined(false),
122 IsLastAccessTimeDefined(false),
123 IsStartPosDefined(false)
125 void SetAttributes(UInt32 attributes)
127 AreAttributesDefined = true;
128 Attributes = attributes;
130 void SetCreationTime(const CArchiveFileTime &creationTime)
132 IsCreationTimeDefined = true;
133 CreationTime = creationTime;
135 void SetLastWriteTime(const CArchiveFileTime &lastWriteTime)
137 IsLastWriteTimeDefined = true;
138 LastWriteTime = lastWriteTime;
140 void SetLastAccessTime(const CArchiveFileTime &lastAccessTime)
142 IsLastAccessTimeDefined = true;
143 LastAccessTime = lastAccessTime;
147 struct CArchiveDatabase
149 CRecordVector<UInt64> PackSizes;
150 CRecordVector<bool> PackCRCsDefined;
151 CRecordVector<UInt32> PackCRCs;
152 CObjectVector<CFolder> Folders;
153 CRecordVector<CNum> NumUnPackStreamsVector;
154 CObjectVector<CFileItem> Files;
158 PackCRCsDefined.Clear();
161 NumUnPackStreamsVector.Clear();
166 return (PackSizes.IsEmpty() &&
167 PackCRCsDefined.IsEmpty() &&
168 PackCRCs.IsEmpty() &&
170 NumUnPackStreamsVector.IsEmpty() &&
175 for (int i = 0; i < NumUnPackStreamsVector.Size(); i++)
176 if (NumUnPackStreamsVector[i] > 1)