OLD | NEW |
(Empty) | |
| 1 /* MtCoder.h -- Multi-thread Coder |
| 2 2009-11-19 : Igor Pavlov : Public domain */ |
| 3 |
| 4 #ifndef __MT_CODER_H |
| 5 #define __MT_CODER_H |
| 6 |
| 7 #include "Threads.h" |
| 8 |
| 9 EXTERN_C_BEGIN |
| 10 |
| 11 typedef struct |
| 12 { |
| 13 CThread thread; |
| 14 CAutoResetEvent startEvent; |
| 15 CAutoResetEvent finishedEvent; |
| 16 int stop; |
| 17 |
| 18 THREAD_FUNC_TYPE func; |
| 19 LPVOID param; |
| 20 THREAD_FUNC_RET_TYPE res; |
| 21 } CLoopThread; |
| 22 |
| 23 void LoopThread_Construct(CLoopThread *p); |
| 24 void LoopThread_Close(CLoopThread *p); |
| 25 WRes LoopThread_Create(CLoopThread *p); |
| 26 WRes LoopThread_StopAndWait(CLoopThread *p); |
| 27 WRes LoopThread_StartSubThread(CLoopThread *p); |
| 28 WRes LoopThread_WaitSubThread(CLoopThread *p); |
| 29 |
| 30 #ifndef _7ZIP_ST |
| 31 #define NUM_MT_CODER_THREADS_MAX 32 |
| 32 #else |
| 33 #define NUM_MT_CODER_THREADS_MAX 1 |
| 34 #endif |
| 35 |
| 36 typedef struct |
| 37 { |
| 38 UInt64 totalInSize; |
| 39 UInt64 totalOutSize; |
| 40 ICompressProgress *progress; |
| 41 SRes res; |
| 42 CCriticalSection cs; |
| 43 UInt64 inSizes[NUM_MT_CODER_THREADS_MAX]; |
| 44 UInt64 outSizes[NUM_MT_CODER_THREADS_MAX]; |
| 45 } CMtProgress; |
| 46 |
| 47 SRes MtProgress_Set(CMtProgress *p, unsigned index, UInt64 inSize, UInt64 outSiz
e); |
| 48 |
| 49 struct _CMtCoder; |
| 50 |
| 51 typedef struct |
| 52 { |
| 53 struct _CMtCoder *mtCoder; |
| 54 Byte *outBuf; |
| 55 size_t outBufSize; |
| 56 Byte *inBuf; |
| 57 size_t inBufSize; |
| 58 unsigned index; |
| 59 CLoopThread thread; |
| 60 |
| 61 Bool stopReading; |
| 62 Bool stopWriting; |
| 63 CAutoResetEvent canRead; |
| 64 CAutoResetEvent canWrite; |
| 65 } CMtThread; |
| 66 |
| 67 typedef struct |
| 68 { |
| 69 SRes (*Code)(void *p, unsigned index, Byte *dest, size_t *destSize, |
| 70 const Byte *src, size_t srcSize, int finished); |
| 71 } IMtCoderCallback; |
| 72 |
| 73 typedef struct _CMtCoder |
| 74 { |
| 75 size_t blockSize; |
| 76 size_t destBlockSize; |
| 77 unsigned numThreads; |
| 78 |
| 79 ISeqInStream *inStream; |
| 80 ISeqOutStream *outStream; |
| 81 ICompressProgress *progress; |
| 82 ISzAlloc *alloc; |
| 83 |
| 84 IMtCoderCallback *mtCallback; |
| 85 CCriticalSection cs; |
| 86 SRes res; |
| 87 |
| 88 CMtProgress mtProgress; |
| 89 CMtThread threads[NUM_MT_CODER_THREADS_MAX]; |
| 90 } CMtCoder; |
| 91 |
| 92 void MtCoder_Construct(CMtCoder* p); |
| 93 void MtCoder_Destruct(CMtCoder* p); |
| 94 SRes MtCoder_Code(CMtCoder *p); |
| 95 |
| 96 EXTERN_C_END |
| 97 |
| 98 #endif |
OLD | NEW |