1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /* LzFindMt.h -- multithreaded Match finder for LZ algorithms
- 2008-10-04 : Igor Pavlov : Public domain */
- #ifndef __LZFINDMT_H
- #define __LZFINDMT_H
- #include "Threads.h"
- #include "LzFind.h"
- #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;
- 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, ISzAlloc *alloc);
- SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore,
- UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc);
- void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable);
- void MatchFinderMt_ReleaseStream(CMatchFinderMt *p);
- #endif
|