xref: /aosp_15_r20/external/lzma/C/Lzma2DecMt.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker /* Lzma2DecMt.h -- LZMA2 Decoder Multi-thread
2*f6dc9357SAndroid Build Coastguard Worker 2023-04-13 : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker 
4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_LZMA2_DEC_MT_H
5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_LZMA2_DEC_MT_H
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "7zTypes.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_BEGIN
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker typedef struct
12*f6dc9357SAndroid Build Coastguard Worker {
13*f6dc9357SAndroid Build Coastguard Worker   size_t inBufSize_ST;
14*f6dc9357SAndroid Build Coastguard Worker   size_t outStep_ST;
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_ST
17*f6dc9357SAndroid Build Coastguard Worker   unsigned numThreads;
18*f6dc9357SAndroid Build Coastguard Worker   size_t inBufSize_MT;
19*f6dc9357SAndroid Build Coastguard Worker   size_t outBlockMax;
20*f6dc9357SAndroid Build Coastguard Worker   size_t inBlockMax;
21*f6dc9357SAndroid Build Coastguard Worker   #endif
22*f6dc9357SAndroid Build Coastguard Worker } CLzma2DecMtProps;
23*f6dc9357SAndroid Build Coastguard Worker 
24*f6dc9357SAndroid Build Coastguard Worker /* init to single-thread mode */
25*f6dc9357SAndroid Build Coastguard Worker void Lzma2DecMtProps_Init(CLzma2DecMtProps *p);
26*f6dc9357SAndroid Build Coastguard Worker 
27*f6dc9357SAndroid Build Coastguard Worker 
28*f6dc9357SAndroid Build Coastguard Worker /* ---------- CLzma2DecMtHandle Interface ---------- */
29*f6dc9357SAndroid Build Coastguard Worker 
30*f6dc9357SAndroid Build Coastguard Worker /* Lzma2DecMt_ * functions can return the following exit codes:
31*f6dc9357SAndroid Build Coastguard Worker SRes:
32*f6dc9357SAndroid Build Coastguard Worker   SZ_OK           - OK
33*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_MEM    - Memory allocation error
34*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_PARAM  - Incorrect paramater in props
35*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_WRITE  - ISeqOutStream write callback error
36*f6dc9357SAndroid Build Coastguard Worker   // SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
37*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_PROGRESS - some break from progress callback
38*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
39*f6dc9357SAndroid Build Coastguard Worker */
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker typedef struct CLzma2DecMt CLzma2DecMt;
42*f6dc9357SAndroid Build Coastguard Worker typedef CLzma2DecMt * CLzma2DecMtHandle;
43*f6dc9357SAndroid Build Coastguard Worker // Z7_DECLARE_HANDLE(CLzma2DecMtHandle)
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid);
46*f6dc9357SAndroid Build Coastguard Worker void Lzma2DecMt_Destroy(CLzma2DecMtHandle p);
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p,
49*f6dc9357SAndroid Build Coastguard Worker     Byte prop,
50*f6dc9357SAndroid Build Coastguard Worker     const CLzma2DecMtProps *props,
51*f6dc9357SAndroid Build Coastguard Worker     ISeqOutStreamPtr outStream,
52*f6dc9357SAndroid Build Coastguard Worker     const UInt64 *outDataSize, // NULL means undefined
53*f6dc9357SAndroid Build Coastguard Worker     int finishMode,            // 0 - partial unpacking is allowed, 1 - if lzma2 stream must be finished
54*f6dc9357SAndroid Build Coastguard Worker     // Byte *outBuf, size_t *outBufSize,
55*f6dc9357SAndroid Build Coastguard Worker     ISeqInStreamPtr inStream,
56*f6dc9357SAndroid Build Coastguard Worker     // const Byte *inData, size_t inDataSize,
57*f6dc9357SAndroid Build Coastguard Worker 
58*f6dc9357SAndroid Build Coastguard Worker     // out variables:
59*f6dc9357SAndroid Build Coastguard Worker     UInt64 *inProcessed,
60*f6dc9357SAndroid Build Coastguard Worker     int *isMT,  /* out: (*isMT == 0), if single thread decoding was used */
61*f6dc9357SAndroid Build Coastguard Worker 
62*f6dc9357SAndroid Build Coastguard Worker     // UInt64 *outProcessed,
63*f6dc9357SAndroid Build Coastguard Worker     ICompressProgressPtr progress);
64*f6dc9357SAndroid Build Coastguard Worker 
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker /* ---------- Read from CLzma2DecMtHandle Interface ---------- */
67*f6dc9357SAndroid Build Coastguard Worker 
68*f6dc9357SAndroid Build Coastguard Worker SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp,
69*f6dc9357SAndroid Build Coastguard Worker     Byte prop,
70*f6dc9357SAndroid Build Coastguard Worker     const CLzma2DecMtProps *props,
71*f6dc9357SAndroid Build Coastguard Worker     const UInt64 *outDataSize, int finishMode,
72*f6dc9357SAndroid Build Coastguard Worker     ISeqInStreamPtr inStream);
73*f6dc9357SAndroid Build Coastguard Worker 
74*f6dc9357SAndroid Build Coastguard Worker SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp,
75*f6dc9357SAndroid Build Coastguard Worker     Byte *data, size_t *outSize,
76*f6dc9357SAndroid Build Coastguard Worker     UInt64 *inStreamProcessed);
77*f6dc9357SAndroid Build Coastguard Worker 
78*f6dc9357SAndroid Build Coastguard Worker 
79*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END
80*f6dc9357SAndroid Build Coastguard Worker 
81*f6dc9357SAndroid Build Coastguard Worker #endif
82