mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-16 01:11:28 +00:00
718112a8fe
Currently none of these is being used, but eventually they will, once more code gets ported over. So it's better to have them right away and avoid editing the project file too much, only to revert that later.
101 lines
2.4 KiB
C
101 lines
2.4 KiB
C
/* LzFindMt.h -- multithreaded Match finder for LZ algorithms
|
|
2018-07-04 : 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
|
|
{
|
|
BoolInt wasCreated;
|
|
BoolInt needStart;
|
|
BoolInt exit;
|
|
BoolInt stopWriting;
|
|
|
|
CThread thread;
|
|
CAutoResetEvent canStart;
|
|
CAutoResetEvent wasStarted;
|
|
CAutoResetEvent wasStopped;
|
|
CSemaphore freeSemaphore;
|
|
CSemaphore filledSemaphore;
|
|
BoolInt csWasInitialized;
|
|
BoolInt 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
|