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;
102 void SzFileFree(CFileItem
*fileItem
, void (*freeFunc
)(void *p
))
104 freeFunc(fileItem
->Name
);
105 SzFileInit(fileItem
);
108 void SzArchiveDatabaseInit(CArchiveDatabase
*db
)
110 db
->NumPackStreams
= 0;
112 db
->PackCRCsDefined
= 0;
120 void SzArchiveDatabaseFree(CArchiveDatabase
*db
, void (*freeFunc
)(void *))
123 for (i
= 0; i
< db
->NumFolders
; i
++)
124 SzFolderFree(&db
->Folders
[i
], freeFunc
);
125 for (i
= 0; i
< db
->NumFiles
; i
++)
126 SzFileFree(&db
->Files
[i
], freeFunc
);
127 freeFunc(db
->PackSizes
);
128 freeFunc(db
->PackCRCsDefined
);
129 freeFunc(db
->PackCRCs
);
130 freeFunc(db
->Folders
);
132 SzArchiveDatabaseInit(db
);