Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* MtCoder.h -- Multi-thread Coder
2009-11-19 : Igor Pavlov : Public domain */
#ifndef __MT_CODER_H
#define __MT_CODER_H
#include "Threads.h"
EXTERN_C_BEGIN
typedef struct { CThread thread; CAutoResetEvent startEvent; CAutoResetEvent finishedEvent; int stop; THREAD_FUNC_TYPE func; LPVOID param; THREAD_FUNC_RET_TYPE res; } CLoopThread;
void LoopThread_Construct(CLoopThread *p); void LoopThread_Close(CLoopThread *p); WRes LoopThread_Create(CLoopThread *p); WRes LoopThread_StopAndWait(CLoopThread *p); WRes LoopThread_StartSubThread(CLoopThread *p); WRes LoopThread_WaitSubThread(CLoopThread *p);
#ifndef _7ZIP_ST
#define NUM_MT_CODER_THREADS_MAX 32
#else
#define NUM_MT_CODER_THREADS_MAX 1
#endif
typedef struct { UInt64 totalInSize; UInt64 totalOutSize; ICompressProgress *progress; SRes res; CCriticalSection cs; UInt64 inSizes[NUM_MT_CODER_THREADS_MAX]; UInt64 outSizes[NUM_MT_CODER_THREADS_MAX]; } CMtProgress;
SRes MtProgress_Set(CMtProgress *p, unsigned index, UInt64 inSize, UInt64 outSize);
struct _CMtCoder;
typedef struct { struct _CMtCoder *mtCoder; Byte *outBuf; size_t outBufSize; Byte *inBuf; size_t inBufSize; unsigned index; CLoopThread thread;
Bool stopReading; Bool stopWriting; CAutoResetEvent canRead; CAutoResetEvent canWrite; } CMtThread;
typedef struct { SRes (*Code)(void *p, unsigned index, Byte *dest, size_t *destSize, const Byte *src, size_t srcSize, int finished); } IMtCoderCallback;
typedef struct _CMtCoder { size_t blockSize; size_t destBlockSize; unsigned numThreads; ISeqInStream *inStream; ISeqOutStream *outStream; ICompressProgress *progress; ISzAlloc *alloc;
IMtCoderCallback *mtCallback; CCriticalSection cs; SRes res;
CMtProgress mtProgress; CMtThread threads[NUM_MT_CODER_THREADS_MAX]; } CMtCoder;
void MtCoder_Construct(CMtCoder* p); void MtCoder_Destruct(CMtCoder* p); SRes MtCoder_Code(CMtCoder *p);
EXTERN_C_END
#endif
|