6 void SzCoderInfoInit(CCoderInfo *coder)
8 SzByteBufferInit(&coder->Properties);
11 void SzCoderInfoFree(CCoderInfo *coder, void (*freeFunc)(void *p))
13 SzByteBufferFree(&coder->Properties, freeFunc);
14 SzCoderInfoInit(coder);
17 void SzFolderInit(CFolder *folder)
19 folder->NumCoders = 0;
21 folder->NumBindPairs = 0;
22 folder->BindPairs = 0;
23 folder->NumPackStreams = 0;
24 folder->PackStreams = 0;
25 folder->UnPackSizes = 0;
26 folder->UnPackCRCDefined = 0;
27 folder->UnPackCRC = 0;
28 folder->NumUnPackStreams = 0;
31 void SzFolderFree(CFolder *folder, void (*freeFunc)(void *p))
34 for (i = 0; i < folder->NumCoders; i++)
35 SzCoderInfoFree(&folder->Coders[i], freeFunc);
36 freeFunc(folder->Coders);
37 freeFunc(folder->BindPairs);
38 freeFunc(folder->PackStreams);
39 freeFunc(folder->UnPackSizes);
43 UInt32 SzFolderGetNumOutStreams(CFolder *folder)
47 for (i = 0; i < folder->NumCoders; i++)
48 result += folder->Coders[i].NumOutStreams;
52 int SzFolderFindBindPairForInStream(CFolder *folder, UInt32 inStreamIndex)
55 for(i = 0; i < folder->NumBindPairs; i++)
56 if (folder->BindPairs[i].InIndex == inStreamIndex)
62 int SzFolderFindBindPairForOutStream(CFolder *folder, UInt32 outStreamIndex)
65 for(i = 0; i < folder->NumBindPairs; i++)
66 if (folder->BindPairs[i].OutIndex == outStreamIndex)
71 CFileSize SzFolderGetUnPackSize(CFolder *folder)
73 int i = (int)SzFolderGetNumOutStreams(folder);
76 for (i--; i >= 0; i--)
77 if (SzFolderFindBindPairForOutStream(folder, i) < 0)
78 return folder->UnPackSizes[i];
84 int FindPackStreamArrayIndex(int inStreamIndex) const
86 for(int i = 0; i < PackStreams.Size(); i++)
87 if (PackStreams[i] == inStreamIndex)
93 void SzFileInit(CFileItem *fileItem)
95 fileItem->IsFileCRCDefined = 0;
96 fileItem->HasStream = 1;
97 fileItem->IsDirectory = 0;
99 fileItem->IsLastWriteTimeDefined = 0;
103 void SzFileFree(CFileItem *fileItem, void (*freeFunc)(void *p))
105 freeFunc(fileItem->Name);
106 SzFileInit(fileItem);
109 void SzArchiveDatabaseInit(CArchiveDatabase *db)
111 db->NumPackStreams = 0;
113 db->PackCRCsDefined = 0;
121 void SzArchiveDatabaseFree(CArchiveDatabase *db, void (*freeFunc)(void *))
124 for (i = 0; i < db->NumFolders; i++)
125 SzFolderFree(&db->Folders[i], freeFunc);
126 for (i = 0; i < db->NumFiles; i++)
127 SzFileFree(&db->Files[i], freeFunc);
128 freeFunc(db->PackSizes);
129 freeFunc(db->PackCRCsDefined);
130 freeFunc(db->PackCRCs);
131 freeFunc(db->Folders);
133 SzArchiveDatabaseInit(db);