Index: third_party/lzma_sdk/C/LzFindMt.h |
=================================================================== |
--- third_party/lzma_sdk/C/LzFindMt.h (revision 0) |
+++ third_party/lzma_sdk/C/LzFindMt.h (revision 0) |
@@ -0,0 +1,105 @@ |
+/* LzFindMt.h -- multithreaded Match finder for LZ algorithms |
+2009-02-07 : Igor Pavlov : Public domain */ |
+ |
+#ifndef __LZ_FIND_MT_H |
+#define __LZ_FIND_MT_H |
+ |
+#include "LzFind.h" |
+#include "Threads.h" |
+ |
+#ifdef __cplusplus |
+extern "C" { |
+#endif |
+ |
+#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); |
+ |
+#ifdef __cplusplus |
+} |
+#endif |
+ |
+#endif |
Property changes on: third_party\lzma_sdk\C\LzFindMt.h |
___________________________________________________________________ |
Added: svn:executable |
+ * |
Added: svn:eol-style |
+ LF |