diff options
author | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2023-06-21 00:00:00 +0000 |
---|---|---|
committer | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2023-12-17 14:59:19 +0500 |
commit | 5b39dc76f1bc82f941d5c800ab9f34407a06b53a (patch) | |
tree | fe5e17420300b715021a76328444088d32047963 /C/XzEnc.c | |
parent | 93be7d4abfd4233228f58ee1fbbcd76d91be66a4 (diff) | |
download | 7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.tar.gz 7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.tar.bz2 7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.zip |
23.0123.01
Diffstat (limited to 'C/XzEnc.c')
-rw-r--r-- | C/XzEnc.c | 270 |
1 files changed, 151 insertions, 119 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* XzEnc.c -- Xz Encode | 1 | /* XzEnc.c -- Xz Encode |
2 | 2021-04-01 : Igor Pavlov : Public domain */ | 2 | 2023-04-13 : Igor Pavlov : Public domain */ |
3 | 3 | ||
4 | #include "Precomp.h" | 4 | #include "Precomp.h" |
5 | 5 | ||
@@ -18,13 +18,13 @@ | |||
18 | 18 | ||
19 | #include "XzEnc.h" | 19 | #include "XzEnc.h" |
20 | 20 | ||
21 | // #define _7ZIP_ST | 21 | // #define Z7_ST |
22 | 22 | ||
23 | #ifndef _7ZIP_ST | 23 | #ifndef Z7_ST |
24 | #include "MtCoder.h" | 24 | #include "MtCoder.h" |
25 | #else | 25 | #else |
26 | #define MTCODER__THREADS_MAX 1 | 26 | #define MTCODER_THREADS_MAX 1 |
27 | #define MTCODER__BLOCKS_MAX 1 | 27 | #define MTCODER_BLOCKS_MAX 1 |
28 | #endif | 28 | #endif |
29 | 29 | ||
30 | #define XZ_GET_PAD_SIZE(dataSize) ((4 - ((unsigned)(dataSize) & 3)) & 3) | 30 | #define XZ_GET_PAD_SIZE(dataSize) ((4 - ((unsigned)(dataSize) & 3)) & 3) |
@@ -35,25 +35,25 @@ | |||
35 | #define XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(unpackSize) (XZ_BLOCK_HEADER_SIZE_MAX + XZ_GET_MAX_BLOCK_PACK_SIZE(unpackSize)) | 35 | #define XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(unpackSize) (XZ_BLOCK_HEADER_SIZE_MAX + XZ_GET_MAX_BLOCK_PACK_SIZE(unpackSize)) |
36 | 36 | ||
37 | 37 | ||
38 | #define XzBlock_ClearFlags(p) (p)->flags = 0; | 38 | // #define XzBlock_ClearFlags(p) (p)->flags = 0; |
39 | #define XzBlock_SetNumFilters(p, n) (p)->flags = (Byte)((p)->flags | ((n) - 1)); | 39 | #define XzBlock_ClearFlags_SetNumFilters(p, n) (p)->flags = (Byte)((n) - 1); |
40 | #define XzBlock_SetHasPackSize(p) (p)->flags |= XZ_BF_PACK_SIZE; | 40 | #define XzBlock_SetHasPackSize(p) (p)->flags |= XZ_BF_PACK_SIZE; |
41 | #define XzBlock_SetHasUnpackSize(p) (p)->flags |= XZ_BF_UNPACK_SIZE; | 41 | #define XzBlock_SetHasUnpackSize(p) (p)->flags |= XZ_BF_UNPACK_SIZE; |
42 | 42 | ||
43 | 43 | ||
44 | static SRes WriteBytes(ISeqOutStream *s, const void *buf, size_t size) | 44 | static SRes WriteBytes(ISeqOutStreamPtr s, const void *buf, size_t size) |
45 | { | 45 | { |
46 | return (ISeqOutStream_Write(s, buf, size) == size) ? SZ_OK : SZ_ERROR_WRITE; | 46 | return (ISeqOutStream_Write(s, buf, size) == size) ? SZ_OK : SZ_ERROR_WRITE; |
47 | } | 47 | } |
48 | 48 | ||
49 | static SRes WriteBytesUpdateCrc(ISeqOutStream *s, const void *buf, size_t size, UInt32 *crc) | 49 | static SRes WriteBytes_UpdateCrc(ISeqOutStreamPtr s, const void *buf, size_t size, UInt32 *crc) |
50 | { | 50 | { |
51 | *crc = CrcUpdate(*crc, buf, size); | 51 | *crc = CrcUpdate(*crc, buf, size); |
52 | return WriteBytes(s, buf, size); | 52 | return WriteBytes(s, buf, size); |
53 | } | 53 | } |
54 | 54 | ||
55 | 55 | ||
56 | static SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStream *s) | 56 | static SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStreamPtr s) |
57 | { | 57 | { |
58 | UInt32 crc; | 58 | UInt32 crc; |
59 | Byte header[XZ_STREAM_HEADER_SIZE]; | 59 | Byte header[XZ_STREAM_HEADER_SIZE]; |
@@ -61,12 +61,12 @@ static SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStream *s) | |||
61 | header[XZ_SIG_SIZE] = (Byte)(f >> 8); | 61 | header[XZ_SIG_SIZE] = (Byte)(f >> 8); |
62 | header[XZ_SIG_SIZE + 1] = (Byte)(f & 0xFF); | 62 | header[XZ_SIG_SIZE + 1] = (Byte)(f & 0xFF); |
63 | crc = CrcCalc(header + XZ_SIG_SIZE, XZ_STREAM_FLAGS_SIZE); | 63 | crc = CrcCalc(header + XZ_SIG_SIZE, XZ_STREAM_FLAGS_SIZE); |
64 | SetUi32(header + XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE, crc); | 64 | SetUi32(header + XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE, crc) |
65 | return WriteBytes(s, header, XZ_STREAM_HEADER_SIZE); | 65 | return WriteBytes(s, header, XZ_STREAM_HEADER_SIZE); |
66 | } | 66 | } |
67 | 67 | ||
68 | 68 | ||
69 | static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStream *s) | 69 | static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStreamPtr s) |
70 | { | 70 | { |
71 | Byte header[XZ_BLOCK_HEADER_SIZE_MAX]; | 71 | Byte header[XZ_BLOCK_HEADER_SIZE_MAX]; |
72 | 72 | ||
@@ -91,7 +91,7 @@ static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStream *s) | |||
91 | header[pos++] = 0; | 91 | header[pos++] = 0; |
92 | 92 | ||
93 | header[0] = (Byte)(pos >> 2); | 93 | header[0] = (Byte)(pos >> 2); |
94 | SetUi32(header + pos, CrcCalc(header, pos)); | 94 | SetUi32(header + pos, CrcCalc(header, pos)) |
95 | return WriteBytes(s, header, pos + 4); | 95 | return WriteBytes(s, header, pos + 4); |
96 | } | 96 | } |
97 | 97 | ||
@@ -182,7 +182,7 @@ static SRes XzEncIndex_AddIndexRecord(CXzEncIndex *p, UInt64 unpackSize, UInt64 | |||
182 | size_t newSize = p->allocated * 2 + 16 * 2; | 182 | size_t newSize = p->allocated * 2 + 16 * 2; |
183 | if (newSize < p->size + pos) | 183 | if (newSize < p->size + pos) |
184 | return SZ_ERROR_MEM; | 184 | return SZ_ERROR_MEM; |
185 | RINOK(XzEncIndex_ReAlloc(p, newSize, alloc)); | 185 | RINOK(XzEncIndex_ReAlloc(p, newSize, alloc)) |
186 | } | 186 | } |
187 | memcpy(p->blocks + p->size, buf, pos); | 187 | memcpy(p->blocks + p->size, buf, pos); |
188 | p->size += pos; | 188 | p->size += pos; |
@@ -191,7 +191,7 @@ static SRes XzEncIndex_AddIndexRecord(CXzEncIndex *p, UInt64 unpackSize, UInt64 | |||
191 | } | 191 | } |
192 | 192 | ||
193 | 193 | ||
194 | static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, ISeqOutStream *s) | 194 | static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, ISeqOutStreamPtr s) |
195 | { | 195 | { |
196 | Byte buf[32]; | 196 | Byte buf[32]; |
197 | UInt64 globalPos; | 197 | UInt64 globalPos; |
@@ -200,8 +200,8 @@ static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, I | |||
200 | 200 | ||
201 | globalPos = pos; | 201 | globalPos = pos; |
202 | buf[0] = 0; | 202 | buf[0] = 0; |
203 | RINOK(WriteBytesUpdateCrc(s, buf, pos, &crc)); | 203 | RINOK(WriteBytes_UpdateCrc(s, buf, pos, &crc)) |
204 | RINOK(WriteBytesUpdateCrc(s, p->blocks, p->size, &crc)); | 204 | RINOK(WriteBytes_UpdateCrc(s, p->blocks, p->size, &crc)) |
205 | globalPos += p->size; | 205 | globalPos += p->size; |
206 | 206 | ||
207 | pos = XZ_GET_PAD_SIZE(globalPos); | 207 | pos = XZ_GET_PAD_SIZE(globalPos); |
@@ -211,12 +211,12 @@ static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, I | |||
211 | globalPos += pos; | 211 | globalPos += pos; |
212 | 212 | ||
213 | crc = CrcUpdate(crc, buf + 4 - pos, pos); | 213 | crc = CrcUpdate(crc, buf + 4 - pos, pos); |
214 | SetUi32(buf + 4, CRC_GET_DIGEST(crc)); | 214 | SetUi32(buf + 4, CRC_GET_DIGEST(crc)) |
215 | 215 | ||
216 | SetUi32(buf + 8 + 4, (UInt32)(globalPos >> 2)); | 216 | SetUi32(buf + 8 + 4, (UInt32)(globalPos >> 2)) |
217 | buf[8 + 8] = (Byte)(flags >> 8); | 217 | buf[8 + 8] = (Byte)(flags >> 8); |
218 | buf[8 + 9] = (Byte)(flags & 0xFF); | 218 | buf[8 + 9] = (Byte)(flags & 0xFF); |
219 | SetUi32(buf + 8, CrcCalc(buf + 8 + 4, 6)); | 219 | SetUi32(buf + 8, CrcCalc(buf + 8 + 4, 6)) |
220 | buf[8 + 10] = XZ_FOOTER_SIG_0; | 220 | buf[8 + 10] = XZ_FOOTER_SIG_0; |
221 | buf[8 + 11] = XZ_FOOTER_SIG_1; | 221 | buf[8 + 11] = XZ_FOOTER_SIG_1; |
222 | 222 | ||
@@ -230,7 +230,7 @@ static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, I | |||
230 | typedef struct | 230 | typedef struct |
231 | { | 231 | { |
232 | ISeqInStream vt; | 232 | ISeqInStream vt; |
233 | ISeqInStream *realStream; | 233 | ISeqInStreamPtr realStream; |
234 | const Byte *data; | 234 | const Byte *data; |
235 | UInt64 limit; | 235 | UInt64 limit; |
236 | UInt64 processed; | 236 | UInt64 processed; |
@@ -251,9 +251,9 @@ static void SeqCheckInStream_GetDigest(CSeqCheckInStream *p, Byte *digest) | |||
251 | XzCheck_Final(&p->check, digest); | 251 | XzCheck_Final(&p->check, digest); |
252 | } | 252 | } |
253 | 253 | ||
254 | static SRes SeqCheckInStream_Read(const ISeqInStream *pp, void *data, size_t *size) | 254 | static SRes SeqCheckInStream_Read(ISeqInStreamPtr pp, void *data, size_t *size) |
255 | { | 255 | { |
256 | CSeqCheckInStream *p = CONTAINER_FROM_VTBL(pp, CSeqCheckInStream, vt); | 256 | Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqCheckInStream) |
257 | size_t size2 = *size; | 257 | size_t size2 = *size; |
258 | SRes res = SZ_OK; | 258 | SRes res = SZ_OK; |
259 | 259 | ||
@@ -285,15 +285,15 @@ static SRes SeqCheckInStream_Read(const ISeqInStream *pp, void *data, size_t *si | |||
285 | typedef struct | 285 | typedef struct |
286 | { | 286 | { |
287 | ISeqOutStream vt; | 287 | ISeqOutStream vt; |
288 | ISeqOutStream *realStream; | 288 | ISeqOutStreamPtr realStream; |
289 | Byte *outBuf; | 289 | Byte *outBuf; |
290 | size_t outBufLimit; | 290 | size_t outBufLimit; |
291 | UInt64 processed; | 291 | UInt64 processed; |
292 | } CSeqSizeOutStream; | 292 | } CSeqSizeOutStream; |
293 | 293 | ||
294 | static size_t SeqSizeOutStream_Write(const ISeqOutStream *pp, const void *data, size_t size) | 294 | static size_t SeqSizeOutStream_Write(ISeqOutStreamPtr pp, const void *data, size_t size) |
295 | { | 295 | { |
296 | CSeqSizeOutStream *p = CONTAINER_FROM_VTBL(pp, CSeqSizeOutStream, vt); | 296 | Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqSizeOutStream) |
297 | if (p->realStream) | 297 | if (p->realStream) |
298 | size = ISeqOutStream_Write(p->realStream, data, size); | 298 | size = ISeqOutStream_Write(p->realStream, data, size); |
299 | else | 299 | else |
@@ -313,8 +313,8 @@ static size_t SeqSizeOutStream_Write(const ISeqOutStream *pp, const void *data, | |||
313 | 313 | ||
314 | typedef struct | 314 | typedef struct |
315 | { | 315 | { |
316 | ISeqInStream p; | 316 | ISeqInStream vt; |
317 | ISeqInStream *realStream; | 317 | ISeqInStreamPtr realStream; |
318 | IStateCoder StateCoder; | 318 | IStateCoder StateCoder; |
319 | Byte *buf; | 319 | Byte *buf; |
320 | size_t curPos; | 320 | size_t curPos; |
@@ -323,7 +323,39 @@ typedef struct | |||
323 | } CSeqInFilter; | 323 | } CSeqInFilter; |
324 | 324 | ||
325 | 325 | ||
326 | SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc); | 326 | static const z7_Func_BranchConv g_Funcs_BranchConv_RISC_Enc[] = |
327 | { | ||
328 | Z7_BRANCH_CONV_ENC(PPC), | ||
329 | Z7_BRANCH_CONV_ENC(IA64), | ||
330 | Z7_BRANCH_CONV_ENC(ARM), | ||
331 | Z7_BRANCH_CONV_ENC(ARMT), | ||
332 | Z7_BRANCH_CONV_ENC(SPARC), | ||
333 | Z7_BRANCH_CONV_ENC(ARM64) | ||
334 | }; | ||
335 | |||
336 | static SizeT XzBcFilterStateBase_Filter_Enc(CXzBcFilterStateBase *p, Byte *data, SizeT size) | ||
337 | { | ||
338 | switch (p->methodId) | ||
339 | { | ||
340 | case XZ_ID_Delta: | ||
341 | Delta_Encode(p->delta_State, p->delta, data, size); | ||
342 | break; | ||
343 | case XZ_ID_X86: | ||
344 | size = (SizeT)(z7_BranchConvSt_X86_Enc(data, size, p->ip, &p->X86_State) - data); | ||
345 | break; | ||
346 | default: | ||
347 | if (p->methodId >= XZ_ID_PPC) | ||
348 | { | ||
349 | const UInt32 i = p->methodId - XZ_ID_PPC; | ||
350 | if (i < Z7_ARRAY_SIZE(g_Funcs_BranchConv_RISC_Enc)) | ||
351 | size = (SizeT)(g_Funcs_BranchConv_RISC_Enc[i](data, size, p->ip) - data); | ||
352 | } | ||
353 | break; | ||
354 | } | ||
355 | p->ip += (UInt32)size; | ||
356 | return size; | ||
357 | } | ||
358 | |||
327 | 359 | ||
328 | static SRes SeqInFilter_Init(CSeqInFilter *p, const CXzFilter *props, ISzAllocPtr alloc) | 360 | static SRes SeqInFilter_Init(CSeqInFilter *p, const CXzFilter *props, ISzAllocPtr alloc) |
329 | { | 361 | { |
@@ -335,17 +367,17 @@ static SRes SeqInFilter_Init(CSeqInFilter *p, const CXzFilter *props, ISzAllocPt | |||
335 | } | 367 | } |
336 | p->curPos = p->endPos = 0; | 368 | p->curPos = p->endPos = 0; |
337 | p->srcWasFinished = 0; | 369 | p->srcWasFinished = 0; |
338 | RINOK(BraState_SetFromMethod(&p->StateCoder, props->id, 1, alloc)); | 370 | RINOK(Xz_StateCoder_Bc_SetFromMethod_Func(&p->StateCoder, props->id, XzBcFilterStateBase_Filter_Enc, alloc)) |
339 | RINOK(p->StateCoder.SetProps(p->StateCoder.p, props->props, props->propsSize, alloc)); | 371 | RINOK(p->StateCoder.SetProps(p->StateCoder.p, props->props, props->propsSize, alloc)) |
340 | p->StateCoder.Init(p->StateCoder.p); | 372 | p->StateCoder.Init(p->StateCoder.p); |
341 | return SZ_OK; | 373 | return SZ_OK; |
342 | } | 374 | } |
343 | 375 | ||
344 | 376 | ||
345 | static SRes SeqInFilter_Read(const ISeqInStream *pp, void *data, size_t *size) | 377 | static SRes SeqInFilter_Read(ISeqInStreamPtr pp, void *data, size_t *size) |
346 | { | 378 | { |
347 | CSeqInFilter *p = CONTAINER_FROM_VTBL(pp, CSeqInFilter, p); | 379 | Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqInFilter) |
348 | size_t sizeOriginal = *size; | 380 | const size_t sizeOriginal = *size; |
349 | if (sizeOriginal == 0) | 381 | if (sizeOriginal == 0) |
350 | return SZ_OK; | 382 | return SZ_OK; |
351 | *size = 0; | 383 | *size = 0; |
@@ -356,7 +388,7 @@ static SRes SeqInFilter_Read(const ISeqInStream *pp, void *data, size_t *size) | |||
356 | { | 388 | { |
357 | p->curPos = 0; | 389 | p->curPos = 0; |
358 | p->endPos = FILTER_BUF_SIZE; | 390 | p->endPos = FILTER_BUF_SIZE; |
359 | RINOK(ISeqInStream_Read(p->realStream, p->buf, &p->endPos)); | 391 | RINOK(ISeqInStream_Read(p->realStream, p->buf, &p->endPos)) |
360 | if (p->endPos == 0) | 392 | if (p->endPos == 0) |
361 | p->srcWasFinished = 1; | 393 | p->srcWasFinished = 1; |
362 | } | 394 | } |
@@ -381,7 +413,7 @@ static void SeqInFilter_Construct(CSeqInFilter *p) | |||
381 | { | 413 | { |
382 | p->buf = NULL; | 414 | p->buf = NULL; |
383 | p->StateCoder.p = NULL; | 415 | p->StateCoder.p = NULL; |
384 | p->p.Read = SeqInFilter_Read; | 416 | p->vt.Read = SeqInFilter_Read; |
385 | } | 417 | } |
386 | 418 | ||
387 | static void SeqInFilter_Free(CSeqInFilter *p, ISzAllocPtr alloc) | 419 | static void SeqInFilter_Free(CSeqInFilter *p, ISzAllocPtr alloc) |
@@ -406,13 +438,13 @@ static void SeqInFilter_Free(CSeqInFilter *p, ISzAllocPtr alloc) | |||
406 | typedef struct | 438 | typedef struct |
407 | { | 439 | { |
408 | ISeqInStream vt; | 440 | ISeqInStream vt; |
409 | ISeqInStream *inStream; | 441 | ISeqInStreamPtr inStream; |
410 | CSbEnc enc; | 442 | CSbEnc enc; |
411 | } CSbEncInStream; | 443 | } CSbEncInStream; |
412 | 444 | ||
413 | static SRes SbEncInStream_Read(const ISeqInStream *pp, void *data, size_t *size) | 445 | static SRes SbEncInStream_Read(ISeqInStreamPtr pp, void *data, size_t *size) |
414 | { | 446 | { |
415 | CSbEncInStream *p = CONTAINER_FROM_VTBL(pp, CSbEncInStream, vt); | 447 | CSbEncInStream *p = Z7_CONTAINER_FROM_VTBL(pp, CSbEncInStream, vt); |
416 | size_t sizeOriginal = *size; | 448 | size_t sizeOriginal = *size; |
417 | if (sizeOriginal == 0) | 449 | if (sizeOriginal == 0) |
418 | return SZ_OK; | 450 | return SZ_OK; |
@@ -422,7 +454,7 @@ static SRes SbEncInStream_Read(const ISeqInStream *pp, void *data, size_t *size) | |||
422 | if (p->enc.needRead && !p->enc.readWasFinished) | 454 | if (p->enc.needRead && !p->enc.readWasFinished) |
423 | { | 455 | { |
424 | size_t processed = p->enc.needReadSizeMax; | 456 | size_t processed = p->enc.needReadSizeMax; |
425 | RINOK(p->inStream->Read(p->inStream, p->enc.buf + p->enc.readPos, &processed)); | 457 | RINOK(p->inStream->Read(p->inStream, p->enc.buf + p->enc.readPos, &processed)) |
426 | p->enc.readPos += processed; | 458 | p->enc.readPos += processed; |
427 | if (processed == 0) | 459 | if (processed == 0) |
428 | { | 460 | { |
@@ -433,7 +465,7 @@ static SRes SbEncInStream_Read(const ISeqInStream *pp, void *data, size_t *size) | |||
433 | } | 465 | } |
434 | 466 | ||
435 | *size = sizeOriginal; | 467 | *size = sizeOriginal; |
436 | RINOK(SbEnc_Read(&p->enc, data, size)); | 468 | RINOK(SbEnc_Read(&p->enc, data, size)) |
437 | if (*size != 0 || !p->enc.needRead) | 469 | if (*size != 0 || !p->enc.needRead) |
438 | return SZ_OK; | 470 | return SZ_OK; |
439 | } | 471 | } |
@@ -473,7 +505,7 @@ void XzFilterProps_Init(CXzFilterProps *p) | |||
473 | void XzProps_Init(CXzProps *p) | 505 | void XzProps_Init(CXzProps *p) |
474 | { | 506 | { |
475 | p->checkId = XZ_CHECK_CRC32; | 507 | p->checkId = XZ_CHECK_CRC32; |
476 | p->blockSize = XZ_PROPS__BLOCK_SIZE__AUTO; | 508 | p->blockSize = XZ_PROPS_BLOCK_SIZE_AUTO; |
477 | p->numBlockThreads_Reduced = -1; | 509 | p->numBlockThreads_Reduced = -1; |
478 | p->numBlockThreads_Max = -1; | 510 | p->numBlockThreads_Max = -1; |
479 | p->numTotalThreads = -1; | 511 | p->numTotalThreads = -1; |
@@ -502,8 +534,8 @@ static void XzEncProps_Normalize_Fixed(CXzProps *p) | |||
502 | t2 = p->numBlockThreads_Max; | 534 | t2 = p->numBlockThreads_Max; |
503 | t3 = p->numTotalThreads; | 535 | t3 = p->numTotalThreads; |
504 | 536 | ||
505 | if (t2 > MTCODER__THREADS_MAX) | 537 | if (t2 > MTCODER_THREADS_MAX) |
506 | t2 = MTCODER__THREADS_MAX; | 538 | t2 = MTCODER_THREADS_MAX; |
507 | 539 | ||
508 | if (t3 <= 0) | 540 | if (t3 <= 0) |
509 | { | 541 | { |
@@ -519,8 +551,8 @@ static void XzEncProps_Normalize_Fixed(CXzProps *p) | |||
519 | t1 = 1; | 551 | t1 = 1; |
520 | t2 = t3; | 552 | t2 = t3; |
521 | } | 553 | } |
522 | if (t2 > MTCODER__THREADS_MAX) | 554 | if (t2 > MTCODER_THREADS_MAX) |
523 | t2 = MTCODER__THREADS_MAX; | 555 | t2 = MTCODER_THREADS_MAX; |
524 | } | 556 | } |
525 | else if (t1 <= 0) | 557 | else if (t1 <= 0) |
526 | { | 558 | { |
@@ -571,7 +603,7 @@ static void XzProps_Normalize(CXzProps *p) | |||
571 | /* we normalize xzProps properties, but we normalize only some of CXzProps::lzma2Props properties. | 603 | /* we normalize xzProps properties, but we normalize only some of CXzProps::lzma2Props properties. |
572 | Lzma2Enc_SetProps() will normalize lzma2Props later. */ | 604 | Lzma2Enc_SetProps() will normalize lzma2Props later. */ |
573 | 605 | ||
574 | if (p->blockSize == XZ_PROPS__BLOCK_SIZE__SOLID) | 606 | if (p->blockSize == XZ_PROPS_BLOCK_SIZE_SOLID) |
575 | { | 607 | { |
576 | p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; | 608 | p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; |
577 | p->numBlockThreads_Reduced = 1; | 609 | p->numBlockThreads_Reduced = 1; |
@@ -583,15 +615,15 @@ static void XzProps_Normalize(CXzProps *p) | |||
583 | else | 615 | else |
584 | { | 616 | { |
585 | CLzma2EncProps *lzma2 = &p->lzma2Props; | 617 | CLzma2EncProps *lzma2 = &p->lzma2Props; |
586 | if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) | 618 | if (p->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) |
587 | { | 619 | { |
588 | // xz-auto | 620 | // xz-auto |
589 | p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; | 621 | p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; |
590 | 622 | ||
591 | if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) | 623 | if (lzma2->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) |
592 | { | 624 | { |
593 | // if (xz-auto && lzma2-solid) - we use solid for both | 625 | // if (xz-auto && lzma2-solid) - we use solid for both |
594 | p->blockSize = XZ_PROPS__BLOCK_SIZE__SOLID; | 626 | p->blockSize = XZ_PROPS_BLOCK_SIZE_SOLID; |
595 | p->numBlockThreads_Reduced = 1; | 627 | p->numBlockThreads_Reduced = 1; |
596 | p->numBlockThreads_Max = 1; | 628 | p->numBlockThreads_Max = 1; |
597 | if (p->lzma2Props.numTotalThreads <= 0) | 629 | if (p->lzma2Props.numTotalThreads <= 0) |
@@ -610,9 +642,9 @@ static void XzProps_Normalize(CXzProps *p) | |||
610 | p->blockSize = tp.blockSize; // fixed or solid | 642 | p->blockSize = tp.blockSize; // fixed or solid |
611 | p->numBlockThreads_Reduced = tp.numBlockThreads_Reduced; | 643 | p->numBlockThreads_Reduced = tp.numBlockThreads_Reduced; |
612 | p->numBlockThreads_Max = tp.numBlockThreads_Max; | 644 | p->numBlockThreads_Max = tp.numBlockThreads_Max; |
613 | if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) | 645 | if (lzma2->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) |
614 | lzma2->blockSize = tp.blockSize; // fixed or solid, LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID | 646 | lzma2->blockSize = tp.blockSize; // fixed or solid, LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID |
615 | if (lzma2->lzmaProps.reduceSize > tp.blockSize && tp.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) | 647 | if (lzma2->lzmaProps.reduceSize > tp.blockSize && tp.blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) |
616 | lzma2->lzmaProps.reduceSize = tp.blockSize; | 648 | lzma2->lzmaProps.reduceSize = tp.blockSize; |
617 | lzma2->numBlockThreads_Reduced = 1; | 649 | lzma2->numBlockThreads_Reduced = 1; |
618 | lzma2->numBlockThreads_Max = 1; | 650 | lzma2->numBlockThreads_Max = 1; |
@@ -631,9 +663,9 @@ static void XzProps_Normalize(CXzProps *p) | |||
631 | r = p->blockSize; | 663 | r = p->blockSize; |
632 | lzma2->lzmaProps.reduceSize = r; | 664 | lzma2->lzmaProps.reduceSize = r; |
633 | } | 665 | } |
634 | if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) | 666 | if (lzma2->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) |
635 | lzma2->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID; | 667 | lzma2->blockSize = LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID; |
636 | else if (lzma2->blockSize > p->blockSize && lzma2->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) | 668 | else if (lzma2->blockSize > p->blockSize && lzma2->blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) |
637 | lzma2->blockSize = p->blockSize; | 669 | lzma2->blockSize = p->blockSize; |
638 | 670 | ||
639 | XzEncProps_Normalize_Fixed(p); | 671 | XzEncProps_Normalize_Fixed(p); |
@@ -704,17 +736,17 @@ typedef struct | |||
704 | static SRes Xz_CompressBlock( | 736 | static SRes Xz_CompressBlock( |
705 | CLzma2WithFilters *lzmaf, | 737 | CLzma2WithFilters *lzmaf, |
706 | 738 | ||
707 | ISeqOutStream *outStream, | 739 | ISeqOutStreamPtr outStream, |
708 | Byte *outBufHeader, | 740 | Byte *outBufHeader, |
709 | Byte *outBufData, size_t outBufDataLimit, | 741 | Byte *outBufData, size_t outBufDataLimit, |
710 | 742 | ||
711 | ISeqInStream *inStream, | 743 | ISeqInStreamPtr inStream, |
712 | // UInt64 expectedSize, | 744 | // UInt64 expectedSize, |
713 | const Byte *inBuf, // used if (!inStream) | 745 | const Byte *inBuf, // used if (!inStream) |
714 | size_t inBufSize, // used if (!inStream), it's block size, props->blockSize is ignored | 746 | size_t inBufSize, // used if (!inStream), it's block size, props->blockSize is ignored |
715 | 747 | ||
716 | const CXzProps *props, | 748 | const CXzProps *props, |
717 | ICompressProgress *progress, | 749 | ICompressProgressPtr progress, |
718 | int *inStreamFinished, /* only for inStream version */ | 750 | int *inStreamFinished, /* only for inStream version */ |
719 | CXzEncBlockInfo *blockSizes, | 751 | CXzEncBlockInfo *blockSizes, |
720 | ISzAllocPtr alloc, | 752 | ISzAllocPtr alloc, |
@@ -731,12 +763,12 @@ static SRes Xz_CompressBlock( | |||
731 | 763 | ||
732 | *inStreamFinished = False; | 764 | *inStreamFinished = False; |
733 | 765 | ||
734 | RINOK(Lzma2WithFilters_Create(lzmaf, alloc, allocBig)); | 766 | RINOK(Lzma2WithFilters_Create(lzmaf, alloc, allocBig)) |
735 | 767 | ||
736 | RINOK(Lzma2Enc_SetProps(lzmaf->lzma2, &props->lzma2Props)); | 768 | RINOK(Lzma2Enc_SetProps(lzmaf->lzma2, &props->lzma2Props)) |
737 | 769 | ||
738 | XzBlock_ClearFlags(&block); | 770 | // XzBlock_ClearFlags(&block) |
739 | XzBlock_SetNumFilters(&block, 1 + (fp ? 1 : 0)); | 771 | XzBlock_ClearFlags_SetNumFilters(&block, 1 + (fp ? 1 : 0)) |
740 | 772 | ||
741 | if (fp) | 773 | if (fp) |
742 | { | 774 | { |
@@ -752,7 +784,7 @@ static SRes Xz_CompressBlock( | |||
752 | else if (fp->ipDefined) | 784 | else if (fp->ipDefined) |
753 | { | 785 | { |
754 | Byte *ptr = filter->props; | 786 | Byte *ptr = filter->props; |
755 | SetUi32(ptr, fp->ip); | 787 | SetUi32(ptr, fp->ip) |
756 | filter->propsSize = 4; | 788 | filter->propsSize = 4; |
757 | } | 789 | } |
758 | } | 790 | } |
@@ -777,13 +809,13 @@ static SRes Xz_CompressBlock( | |||
777 | if (props->blockSize != (UInt64)(Int64)-1) | 809 | if (props->blockSize != (UInt64)(Int64)-1) |
778 | if (expectedSize > props->blockSize) | 810 | if (expectedSize > props->blockSize) |
779 | block.unpackSize = props->blockSize; | 811 | block.unpackSize = props->blockSize; |
780 | XzBlock_SetHasUnpackSize(&block); | 812 | XzBlock_SetHasUnpackSize(&block) |
781 | } | 813 | } |
782 | */ | 814 | */ |
783 | 815 | ||
784 | if (outStream) | 816 | if (outStream) |
785 | { | 817 | { |
786 | RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)); | 818 | RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)) |
787 | } | 819 | } |
788 | 820 | ||
789 | checkInStream.vt.Read = SeqCheckInStream_Read; | 821 | checkInStream.vt.Read = SeqCheckInStream_Read; |
@@ -801,13 +833,13 @@ static SRes Xz_CompressBlock( | |||
801 | if (fp->id == XZ_ID_Subblock) | 833 | if (fp->id == XZ_ID_Subblock) |
802 | { | 834 | { |
803 | lzmaf->sb.inStream = &checkInStream.vt; | 835 | lzmaf->sb.inStream = &checkInStream.vt; |
804 | RINOK(SbEncInStream_Init(&lzmaf->sb)); | 836 | RINOK(SbEncInStream_Init(&lzmaf->sb)) |
805 | } | 837 | } |
806 | else | 838 | else |
807 | #endif | 839 | #endif |
808 | { | 840 | { |
809 | lzmaf->filter.realStream = &checkInStream.vt; | 841 | lzmaf->filter.realStream = &checkInStream.vt; |
810 | RINOK(SeqInFilter_Init(&lzmaf->filter, filter, alloc)); | 842 | RINOK(SeqInFilter_Init(&lzmaf->filter, filter, alloc)) |
811 | } | 843 | } |
812 | } | 844 | } |
813 | 845 | ||
@@ -841,7 +873,7 @@ static SRes Xz_CompressBlock( | |||
841 | #ifdef USE_SUBBLOCK | 873 | #ifdef USE_SUBBLOCK |
842 | (fp->id == XZ_ID_Subblock) ? &lzmaf->sb.vt: | 874 | (fp->id == XZ_ID_Subblock) ? &lzmaf->sb.vt: |
843 | #endif | 875 | #endif |
844 | &lzmaf->filter.p) : | 876 | &lzmaf->filter.vt) : |
845 | &checkInStream.vt) : NULL, | 877 | &checkInStream.vt) : NULL, |
846 | 878 | ||
847 | useStream ? NULL : inBuf, | 879 | useStream ? NULL : inBuf, |
@@ -852,7 +884,7 @@ static SRes Xz_CompressBlock( | |||
852 | if (outBuf) | 884 | if (outBuf) |
853 | seqSizeOutStream.processed += outSize; | 885 | seqSizeOutStream.processed += outSize; |
854 | 886 | ||
855 | RINOK(res); | 887 | RINOK(res) |
856 | blockSizes->unpackSize = checkInStream.processed; | 888 | blockSizes->unpackSize = checkInStream.processed; |
857 | } | 889 | } |
858 | { | 890 | { |
@@ -866,7 +898,7 @@ static SRes Xz_CompressBlock( | |||
866 | buf[3] = 0; | 898 | buf[3] = 0; |
867 | 899 | ||
868 | SeqCheckInStream_GetDigest(&checkInStream, buf + 4); | 900 | SeqCheckInStream_GetDigest(&checkInStream, buf + 4); |
869 | RINOK(WriteBytes(&seqSizeOutStream.vt, buf + (4 - padSize), padSize + XzFlags_GetCheckSize((CXzStreamFlags)props->checkId))); | 901 | RINOK(WriteBytes(&seqSizeOutStream.vt, buf + (4 - padSize), padSize + XzFlags_GetCheckSize((CXzStreamFlags)props->checkId))) |
870 | 902 | ||
871 | blockSizes->totalSize = seqSizeOutStream.processed - padSize; | 903 | blockSizes->totalSize = seqSizeOutStream.processed - padSize; |
872 | 904 | ||
@@ -877,12 +909,12 @@ static SRes Xz_CompressBlock( | |||
877 | seqSizeOutStream.processed = 0; | 909 | seqSizeOutStream.processed = 0; |
878 | 910 | ||
879 | block.unpackSize = blockSizes->unpackSize; | 911 | block.unpackSize = blockSizes->unpackSize; |
880 | XzBlock_SetHasUnpackSize(&block); | 912 | XzBlock_SetHasUnpackSize(&block) |
881 | 913 | ||
882 | block.packSize = packSize; | 914 | block.packSize = packSize; |
883 | XzBlock_SetHasPackSize(&block); | 915 | XzBlock_SetHasPackSize(&block) |
884 | 916 | ||
885 | RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)); | 917 | RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)) |
886 | 918 | ||
887 | blockSizes->headerSize = (size_t)seqSizeOutStream.processed; | 919 | blockSizes->headerSize = (size_t)seqSizeOutStream.processed; |
888 | blockSizes->totalSize += seqSizeOutStream.processed; | 920 | blockSizes->totalSize += seqSizeOutStream.processed; |
@@ -906,15 +938,15 @@ static SRes Xz_CompressBlock( | |||
906 | typedef struct | 938 | typedef struct |
907 | { | 939 | { |
908 | ICompressProgress vt; | 940 | ICompressProgress vt; |
909 | ICompressProgress *progress; | 941 | ICompressProgressPtr progress; |
910 | UInt64 inOffset; | 942 | UInt64 inOffset; |
911 | UInt64 outOffset; | 943 | UInt64 outOffset; |
912 | } CCompressProgress_XzEncOffset; | 944 | } CCompressProgress_XzEncOffset; |
913 | 945 | ||
914 | 946 | ||
915 | static SRes CompressProgress_XzEncOffset_Progress(const ICompressProgress *pp, UInt64 inSize, UInt64 outSize) | 947 | static SRes CompressProgress_XzEncOffset_Progress(ICompressProgressPtr pp, UInt64 inSize, UInt64 outSize) |
916 | { | 948 | { |
917 | const CCompressProgress_XzEncOffset *p = CONTAINER_FROM_VTBL(pp, CCompressProgress_XzEncOffset, vt); | 949 | const CCompressProgress_XzEncOffset *p = Z7_CONTAINER_FROM_VTBL_CONST(pp, CCompressProgress_XzEncOffset, vt); |
918 | inSize += p->inOffset; | 950 | inSize += p->inOffset; |
919 | outSize += p->outOffset; | 951 | outSize += p->outOffset; |
920 | return ICompressProgress_Progress(p->progress, inSize, outSize); | 952 | return ICompressProgress_Progress(p->progress, inSize, outSize); |
@@ -923,7 +955,7 @@ static SRes CompressProgress_XzEncOffset_Progress(const ICompressProgress *pp, U | |||
923 | 955 | ||
924 | 956 | ||
925 | 957 | ||
926 | typedef struct | 958 | struct CXzEnc |
927 | { | 959 | { |
928 | ISzAllocPtr alloc; | 960 | ISzAllocPtr alloc; |
929 | ISzAllocPtr allocBig; | 961 | ISzAllocPtr allocBig; |
@@ -933,20 +965,19 @@ typedef struct | |||
933 | 965 | ||
934 | CXzEncIndex xzIndex; | 966 | CXzEncIndex xzIndex; |
935 | 967 | ||
936 | CLzma2WithFilters lzmaf_Items[MTCODER__THREADS_MAX]; | 968 | CLzma2WithFilters lzmaf_Items[MTCODER_THREADS_MAX]; |
937 | 969 | ||
938 | size_t outBufSize; /* size of allocated outBufs[i] */ | 970 | size_t outBufSize; /* size of allocated outBufs[i] */ |
939 | Byte *outBufs[MTCODER__BLOCKS_MAX]; | 971 | Byte *outBufs[MTCODER_BLOCKS_MAX]; |
940 | 972 | ||
941 | #ifndef _7ZIP_ST | 973 | #ifndef Z7_ST |
942 | unsigned checkType; | 974 | unsigned checkType; |
943 | ISeqOutStream *outStream; | 975 | ISeqOutStreamPtr outStream; |
944 | BoolInt mtCoder_WasConstructed; | 976 | BoolInt mtCoder_WasConstructed; |
945 | CMtCoder mtCoder; | 977 | CMtCoder mtCoder; |
946 | CXzEncBlockInfo EncBlocks[MTCODER__BLOCKS_MAX]; | 978 | CXzEncBlockInfo EncBlocks[MTCODER_BLOCKS_MAX]; |
947 | #endif | 979 | #endif |
948 | 980 | }; | |
949 | } CXzEnc; | ||
950 | 981 | ||
951 | 982 | ||
952 | static void XzEnc_Construct(CXzEnc *p) | 983 | static void XzEnc_Construct(CXzEnc *p) |
@@ -955,13 +986,13 @@ static void XzEnc_Construct(CXzEnc *p) | |||
955 | 986 | ||
956 | XzEncIndex_Construct(&p->xzIndex); | 987 | XzEncIndex_Construct(&p->xzIndex); |
957 | 988 | ||
958 | for (i = 0; i < MTCODER__THREADS_MAX; i++) | 989 | for (i = 0; i < MTCODER_THREADS_MAX; i++) |
959 | Lzma2WithFilters_Construct(&p->lzmaf_Items[i]); | 990 | Lzma2WithFilters_Construct(&p->lzmaf_Items[i]); |
960 | 991 | ||
961 | #ifndef _7ZIP_ST | 992 | #ifndef Z7_ST |
962 | p->mtCoder_WasConstructed = False; | 993 | p->mtCoder_WasConstructed = False; |
963 | { | 994 | { |
964 | for (i = 0; i < MTCODER__BLOCKS_MAX; i++) | 995 | for (i = 0; i < MTCODER_BLOCKS_MAX; i++) |
965 | p->outBufs[i] = NULL; | 996 | p->outBufs[i] = NULL; |
966 | p->outBufSize = 0; | 997 | p->outBufSize = 0; |
967 | } | 998 | } |
@@ -972,7 +1003,7 @@ static void XzEnc_Construct(CXzEnc *p) | |||
972 | static void XzEnc_FreeOutBufs(CXzEnc *p) | 1003 | static void XzEnc_FreeOutBufs(CXzEnc *p) |
973 | { | 1004 | { |
974 | unsigned i; | 1005 | unsigned i; |
975 | for (i = 0; i < MTCODER__BLOCKS_MAX; i++) | 1006 | for (i = 0; i < MTCODER_BLOCKS_MAX; i++) |
976 | if (p->outBufs[i]) | 1007 | if (p->outBufs[i]) |
977 | { | 1008 | { |
978 | ISzAlloc_Free(p->alloc, p->outBufs[i]); | 1009 | ISzAlloc_Free(p->alloc, p->outBufs[i]); |
@@ -988,10 +1019,10 @@ static void XzEnc_Free(CXzEnc *p, ISzAllocPtr alloc) | |||
988 | 1019 | ||
989 | XzEncIndex_Free(&p->xzIndex, alloc); | 1020 | XzEncIndex_Free(&p->xzIndex, alloc); |
990 | 1021 | ||
991 | for (i = 0; i < MTCODER__THREADS_MAX; i++) | 1022 | for (i = 0; i < MTCODER_THREADS_MAX; i++) |
992 | Lzma2WithFilters_Free(&p->lzmaf_Items[i], alloc); | 1023 | Lzma2WithFilters_Free(&p->lzmaf_Items[i], alloc); |
993 | 1024 | ||
994 | #ifndef _7ZIP_ST | 1025 | #ifndef Z7_ST |
995 | if (p->mtCoder_WasConstructed) | 1026 | if (p->mtCoder_WasConstructed) |
996 | { | 1027 | { |
997 | MtCoder_Destruct(&p->mtCoder); | 1028 | MtCoder_Destruct(&p->mtCoder); |
@@ -1013,37 +1044,38 @@ CXzEncHandle XzEnc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig) | |||
1013 | p->expectedDataSize = (UInt64)(Int64)-1; | 1044 | p->expectedDataSize = (UInt64)(Int64)-1; |
1014 | p->alloc = alloc; | 1045 | p->alloc = alloc; |
1015 | p->allocBig = allocBig; | 1046 | p->allocBig = allocBig; |
1016 | return p; | 1047 | return (CXzEncHandle)p; |
1017 | } | 1048 | } |
1018 | 1049 | ||
1050 | // #define GET_CXzEnc_p CXzEnc *p = (CXzEnc *)(void *)pp; | ||
1019 | 1051 | ||
1020 | void XzEnc_Destroy(CXzEncHandle pp) | 1052 | void XzEnc_Destroy(CXzEncHandle p) |
1021 | { | 1053 | { |
1022 | CXzEnc *p = (CXzEnc *)pp; | 1054 | // GET_CXzEnc_p |
1023 | XzEnc_Free(p, p->alloc); | 1055 | XzEnc_Free(p, p->alloc); |
1024 | ISzAlloc_Free(p->alloc, p); | 1056 | ISzAlloc_Free(p->alloc, p); |
1025 | } | 1057 | } |
1026 | 1058 | ||
1027 | 1059 | ||
1028 | SRes XzEnc_SetProps(CXzEncHandle pp, const CXzProps *props) | 1060 | SRes XzEnc_SetProps(CXzEncHandle p, const CXzProps *props) |
1029 | { | 1061 | { |
1030 | CXzEnc *p = (CXzEnc *)pp; | 1062 | // GET_CXzEnc_p |
1031 | p->xzProps = *props; | 1063 | p->xzProps = *props; |
1032 | XzProps_Normalize(&p->xzProps); | 1064 | XzProps_Normalize(&p->xzProps); |
1033 | return SZ_OK; | 1065 | return SZ_OK; |
1034 | } | 1066 | } |
1035 | 1067 | ||
1036 | 1068 | ||
1037 | void XzEnc_SetDataSize(CXzEncHandle pp, UInt64 expectedDataSiize) | 1069 | void XzEnc_SetDataSize(CXzEncHandle p, UInt64 expectedDataSiize) |
1038 | { | 1070 | { |
1039 | CXzEnc *p = (CXzEnc *)pp; | 1071 | // GET_CXzEnc_p |
1040 | p->expectedDataSize = expectedDataSiize; | 1072 | p->expectedDataSize = expectedDataSiize; |
1041 | } | 1073 | } |
1042 | 1074 | ||
1043 | 1075 | ||
1044 | 1076 | ||
1045 | 1077 | ||
1046 | #ifndef _7ZIP_ST | 1078 | #ifndef Z7_ST |
1047 | 1079 | ||
1048 | static SRes XzEnc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex, | 1080 | static SRes XzEnc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex, |
1049 | const Byte *src, size_t srcSize, int finished) | 1081 | const Byte *src, size_t srcSize, int finished) |
@@ -1073,7 +1105,7 @@ static SRes XzEnc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBuf | |||
1073 | 1105 | ||
1074 | MtProgressThunk_CreateVTable(&progressThunk); | 1106 | MtProgressThunk_CreateVTable(&progressThunk); |
1075 | progressThunk.mtProgress = &me->mtCoder.mtProgress; | 1107 | progressThunk.mtProgress = &me->mtCoder.mtProgress; |
1076 | MtProgressThunk_Init(&progressThunk); | 1108 | MtProgressThunk_INIT(&progressThunk) |
1077 | 1109 | ||
1078 | { | 1110 | { |
1079 | CXzEncBlockInfo blockSizes; | 1111 | CXzEncBlockInfo blockSizes; |
@@ -1112,11 +1144,11 @@ static SRes XzEnc_MtCallback_Write(void *pp, unsigned outBufIndex) | |||
1112 | const CXzEncBlockInfo *bInfo = &me->EncBlocks[outBufIndex]; | 1144 | const CXzEncBlockInfo *bInfo = &me->EncBlocks[outBufIndex]; |
1113 | const Byte *data = me->outBufs[outBufIndex]; | 1145 | const Byte *data = me->outBufs[outBufIndex]; |
1114 | 1146 | ||
1115 | RINOK(WriteBytes(me->outStream, data, bInfo->headerSize)); | 1147 | RINOK(WriteBytes(me->outStream, data, bInfo->headerSize)) |
1116 | 1148 | ||
1117 | { | 1149 | { |
1118 | UInt64 totalPackFull = bInfo->totalSize + XZ_GET_PAD_SIZE(bInfo->totalSize); | 1150 | UInt64 totalPackFull = bInfo->totalSize + XZ_GET_PAD_SIZE(bInfo->totalSize); |
1119 | RINOK(WriteBytes(me->outStream, data + XZ_BLOCK_HEADER_SIZE_MAX, (size_t)totalPackFull - bInfo->headerSize)); | 1151 | RINOK(WriteBytes(me->outStream, data + XZ_BLOCK_HEADER_SIZE_MAX, (size_t)totalPackFull - bInfo->headerSize)) |
1120 | } | 1152 | } |
1121 | 1153 | ||
1122 | return XzEncIndex_AddIndexRecord(&me->xzIndex, bInfo->unpackSize, bInfo->totalSize, me->alloc); | 1154 | return XzEncIndex_AddIndexRecord(&me->xzIndex, bInfo->unpackSize, bInfo->totalSize, me->alloc); |
@@ -1126,9 +1158,9 @@ static SRes XzEnc_MtCallback_Write(void *pp, unsigned outBufIndex) | |||
1126 | 1158 | ||
1127 | 1159 | ||
1128 | 1160 | ||
1129 | SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress) | 1161 | SRes XzEnc_Encode(CXzEncHandle p, ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ICompressProgressPtr progress) |
1130 | { | 1162 | { |
1131 | CXzEnc *p = (CXzEnc *)pp; | 1163 | // GET_CXzEnc_p |
1132 | 1164 | ||
1133 | const CXzProps *props = &p->xzProps; | 1165 | const CXzProps *props = &p->xzProps; |
1134 | 1166 | ||
@@ -1137,7 +1169,7 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1137 | UInt64 numBlocks = 1; | 1169 | UInt64 numBlocks = 1; |
1138 | UInt64 blockSize = props->blockSize; | 1170 | UInt64 blockSize = props->blockSize; |
1139 | 1171 | ||
1140 | if (blockSize != XZ_PROPS__BLOCK_SIZE__SOLID | 1172 | if (blockSize != XZ_PROPS_BLOCK_SIZE_SOLID |
1141 | && props->reduceSize != (UInt64)(Int64)-1) | 1173 | && props->reduceSize != (UInt64)(Int64)-1) |
1142 | { | 1174 | { |
1143 | numBlocks = props->reduceSize / blockSize; | 1175 | numBlocks = props->reduceSize / blockSize; |
@@ -1147,13 +1179,13 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1147 | else | 1179 | else |
1148 | blockSize = (UInt64)1 << 62; | 1180 | blockSize = (UInt64)1 << 62; |
1149 | 1181 | ||
1150 | RINOK(XzEncIndex_PreAlloc(&p->xzIndex, numBlocks, blockSize, XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(blockSize), p->alloc)); | 1182 | RINOK(XzEncIndex_PreAlloc(&p->xzIndex, numBlocks, blockSize, XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(blockSize), p->alloc)) |
1151 | } | 1183 | } |
1152 | 1184 | ||
1153 | RINOK(Xz_WriteHeader((CXzStreamFlags)props->checkId, outStream)); | 1185 | RINOK(Xz_WriteHeader((CXzStreamFlags)props->checkId, outStream)) |
1154 | 1186 | ||
1155 | 1187 | ||
1156 | #ifndef _7ZIP_ST | 1188 | #ifndef Z7_ST |
1157 | if (props->numBlockThreads_Reduced > 1) | 1189 | if (props->numBlockThreads_Reduced > 1) |
1158 | { | 1190 | { |
1159 | IMtCoderCallback2 vt; | 1191 | IMtCoderCallback2 vt; |
@@ -1180,8 +1212,8 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1180 | p->mtCoder.mtCallback = &vt; | 1212 | p->mtCoder.mtCallback = &vt; |
1181 | p->mtCoder.mtCallbackObject = p; | 1213 | p->mtCoder.mtCallbackObject = p; |
1182 | 1214 | ||
1183 | if ( props->blockSize == XZ_PROPS__BLOCK_SIZE__SOLID | 1215 | if ( props->blockSize == XZ_PROPS_BLOCK_SIZE_SOLID |
1184 | || props->blockSize == XZ_PROPS__BLOCK_SIZE__AUTO) | 1216 | || props->blockSize == XZ_PROPS_BLOCK_SIZE_AUTO) |
1185 | return SZ_ERROR_FAIL; | 1217 | return SZ_ERROR_FAIL; |
1186 | 1218 | ||
1187 | p->mtCoder.blockSize = (size_t)props->blockSize; | 1219 | p->mtCoder.blockSize = (size_t)props->blockSize; |
@@ -1200,7 +1232,7 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1200 | p->mtCoder.numThreadsMax = (unsigned)props->numBlockThreads_Max; | 1232 | p->mtCoder.numThreadsMax = (unsigned)props->numBlockThreads_Max; |
1201 | p->mtCoder.expectedDataSize = p->expectedDataSize; | 1233 | p->mtCoder.expectedDataSize = p->expectedDataSize; |
1202 | 1234 | ||
1203 | RINOK(MtCoder_Code(&p->mtCoder)); | 1235 | RINOK(MtCoder_Code(&p->mtCoder)) |
1204 | } | 1236 | } |
1205 | else | 1237 | else |
1206 | #endif | 1238 | #endif |
@@ -1217,7 +1249,7 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1217 | 1249 | ||
1218 | writeStartSizes = 0; | 1250 | writeStartSizes = 0; |
1219 | 1251 | ||
1220 | if (props->blockSize != XZ_PROPS__BLOCK_SIZE__SOLID) | 1252 | if (props->blockSize != XZ_PROPS_BLOCK_SIZE_SOLID) |
1221 | { | 1253 | { |
1222 | writeStartSizes = (props->forceWriteSizesInHeader > 0); | 1254 | writeStartSizes = (props->forceWriteSizesInHeader > 0); |
1223 | 1255 | ||
@@ -1274,18 +1306,18 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1274 | &inStreamFinished, | 1306 | &inStreamFinished, |
1275 | &blockSizes, | 1307 | &blockSizes, |
1276 | p->alloc, | 1308 | p->alloc, |
1277 | p->allocBig)); | 1309 | p->allocBig)) |
1278 | 1310 | ||
1279 | { | 1311 | { |
1280 | UInt64 totalPackFull = blockSizes.totalSize + XZ_GET_PAD_SIZE(blockSizes.totalSize); | 1312 | UInt64 totalPackFull = blockSizes.totalSize + XZ_GET_PAD_SIZE(blockSizes.totalSize); |
1281 | 1313 | ||
1282 | if (writeStartSizes) | 1314 | if (writeStartSizes) |
1283 | { | 1315 | { |
1284 | RINOK(WriteBytes(outStream, p->outBufs[0], blockSizes.headerSize)); | 1316 | RINOK(WriteBytes(outStream, p->outBufs[0], blockSizes.headerSize)) |
1285 | RINOK(WriteBytes(outStream, bufData, (size_t)totalPackFull - blockSizes.headerSize)); | 1317 | RINOK(WriteBytes(outStream, bufData, (size_t)totalPackFull - blockSizes.headerSize)) |
1286 | } | 1318 | } |
1287 | 1319 | ||
1288 | RINOK(XzEncIndex_AddIndexRecord(&p->xzIndex, blockSizes.unpackSize, blockSizes.totalSize, p->alloc)); | 1320 | RINOK(XzEncIndex_AddIndexRecord(&p->xzIndex, blockSizes.unpackSize, blockSizes.totalSize, p->alloc)) |
1289 | 1321 | ||
1290 | progress2.inOffset += blockSizes.unpackSize; | 1322 | progress2.inOffset += blockSizes.unpackSize; |
1291 | progress2.outOffset += totalPackFull; | 1323 | progress2.outOffset += totalPackFull; |
@@ -1302,8 +1334,8 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr | |||
1302 | 1334 | ||
1303 | #include "Alloc.h" | 1335 | #include "Alloc.h" |
1304 | 1336 | ||
1305 | SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, | 1337 | SRes Xz_Encode(ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, |
1306 | const CXzProps *props, ICompressProgress *progress) | 1338 | const CXzProps *props, ICompressProgressPtr progress) |
1307 | { | 1339 | { |
1308 | SRes res; | 1340 | SRes res; |
1309 | CXzEncHandle xz = XzEnc_Create(&g_Alloc, &g_BigAlloc); | 1341 | CXzEncHandle xz = XzEnc_Create(&g_Alloc, &g_BigAlloc); |
@@ -1317,7 +1349,7 @@ SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, | |||
1317 | } | 1349 | } |
1318 | 1350 | ||
1319 | 1351 | ||
1320 | SRes Xz_EncodeEmpty(ISeqOutStream *outStream) | 1352 | SRes Xz_EncodeEmpty(ISeqOutStreamPtr outStream) |
1321 | { | 1353 | { |
1322 | SRes res; | 1354 | SRes res; |
1323 | CXzEncIndex xzIndex; | 1355 | CXzEncIndex xzIndex; |