Source code

Revision control

Copy as Markdown

Other Tools

/* LzFindMt.h -- multithreaded Match finder for LZ algorithms↩
2017-04-03 : Igor Pavlov : Public domain */
#ifndef __LZ_FIND_MT_H↩
#define __LZ_FIND_MT_H↩
#include "LzFind.h"
#include "Threads.h"
EXTERN_C_BEGIN↩
#define kMtHashBlockSize (1 << 13)↩
#define kMtHashNumBlocks (1 << 3)↩
#define kMtHashNumBlocksMask (kMtHashNumBlocks - 1)↩
#define kMtBtBlockSize (1 << 14)↩
#define kMtBtNumBlocks (1 << 6)↩
#define kMtBtNumBlocksMask (kMtBtNumBlocks - 1)↩
typedef struct _CMtSync↩
{↩
Bool wasCreated;↩
Bool needStart;↩
Bool exit;↩
Bool stopWriting;↩
CThread thread;↩
CAutoResetEvent canStart;↩
CAutoResetEvent wasStarted;↩
CAutoResetEvent wasStopped;↩
CSemaphore freeSemaphore;↩
CSemaphore filledSemaphore;↩
Bool csWasInitialized;↩
Bool csWasEntered;↩
CCriticalSection cs;↩
UInt32 numProcessedBlocks;↩
} CMtSync;↩
typedef UInt32 * (*Mf_Mix_Matches)(void *p, UInt32 matchMinPos, UInt32 *distances);↩
/* kMtCacheLineDummy must be >= size_of_CPU_cache_line */
#define kMtCacheLineDummy 128↩
typedef void (*Mf_GetHeads)(const Byte *buffer, UInt32 pos,↩
UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc);↩
typedef struct _CMatchFinderMt↩
{↩
/* LZ */
const Byte *pointerToCurPos;↩
UInt32 *btBuf;↩
UInt32 btBufPos;↩
UInt32 btBufPosLimit;↩
UInt32 lzPos;↩
UInt32 btNumAvailBytes;↩
UInt32 *hash;↩
UInt32 fixedHashSize;↩
UInt32 historySize;↩
const UInt32 *crc;↩
Mf_Mix_Matches MixMatchesFunc;↩
/* LZ + BT */
CMtSync btSync;↩
Byte btDummy[kMtCacheLineDummy];↩
/* BT */
UInt32 *hashBuf;↩
UInt32 hashBufPos;↩
UInt32 hashBufPosLimit;↩
UInt32 hashNumAvail;↩
CLzRef *son;↩
UInt32 matchMaxLen;↩
UInt32 numHashBytes;↩
UInt32 pos;↩
const Byte *buffer;↩
UInt32 cyclicBufferPos;↩
UInt32 cyclicBufferSize; /* it must be historySize + 1 */
UInt32 cutValue;↩
/* BT + Hash */
CMtSync hashSync;↩
/* Byte hashDummy[kMtCacheLineDummy]; */
/* Hash */
Mf_GetHeads GetHeadsFunc;↩
CMatchFinder *MatchFinder;↩
} CMatchFinderMt;↩
void MatchFinderMt_Construct(CMatchFinderMt *p);↩
void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAllocPtr alloc);↩
SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore,↩
UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAllocPtr alloc);↩
void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable);↩
void MatchFinderMt_ReleaseStream(CMatchFinderMt *p);↩
EXTERN_C_END↩
#endif