Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
99 | pmbaty | 1 | /* LzFindMt.h -- multithreaded Match finder for LZ algorithms |
2 | 2008-10-04 : Igor Pavlov : Public domain */ |
||
3 | |||
4 | #ifndef __LZFINDMT_H |
||
5 | #define __LZFINDMT_H |
||
6 | |||
7 | #include "Threads.h" |
||
8 | #include "LzFind.h" |
||
9 | |||
10 | #define kMtHashBlockSize (1 << 13) |
||
11 | #define kMtHashNumBlocks (1 << 3) |
||
12 | #define kMtHashNumBlocksMask (kMtHashNumBlocks - 1) |
||
13 | |||
14 | #define kMtBtBlockSize (1 << 14) |
||
15 | #define kMtBtNumBlocks (1 << 6) |
||
16 | #define kMtBtNumBlocksMask (kMtBtNumBlocks - 1) |
||
17 | |||
18 | typedef struct _CMtSync |
||
19 | { |
||
20 | Bool wasCreated; |
||
21 | Bool needStart; |
||
22 | Bool exit; |
||
23 | Bool stopWriting; |
||
24 | |||
25 | CThread thread; |
||
26 | CAutoResetEvent canStart; |
||
27 | CAutoResetEvent wasStarted; |
||
28 | CAutoResetEvent wasStopped; |
||
29 | CSemaphore freeSemaphore; |
||
30 | CSemaphore filledSemaphore; |
||
31 | Bool csWasInitialized; |
||
32 | Bool csWasEntered; |
||
33 | CCriticalSection cs; |
||
34 | UInt32 numProcessedBlocks; |
||
35 | } CMtSync; |
||
36 | |||
37 | typedef UInt32 * (*Mf_Mix_Matches)(void *p, UInt32 matchMinPos, UInt32 *distances); |
||
38 | |||
39 | /* kMtCacheLineDummy must be >= size_of_CPU_cache_line */ |
||
40 | #define kMtCacheLineDummy 128 |
||
41 | |||
42 | typedef void (*Mf_GetHeads)(const Byte *buffer, UInt32 pos, |
||
43 | UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc); |
||
44 | |||
45 | typedef struct _CMatchFinderMt |
||
46 | { |
||
47 | /* LZ */ |
||
48 | const Byte *pointerToCurPos; |
||
49 | UInt32 *btBuf; |
||
50 | UInt32 btBufPos; |
||
51 | UInt32 btBufPosLimit; |
||
52 | UInt32 lzPos; |
||
53 | UInt32 btNumAvailBytes; |
||
54 | |||
55 | UInt32 *hash; |
||
56 | UInt32 fixedHashSize; |
||
57 | UInt32 historySize; |
||
58 | const UInt32 *crc; |
||
59 | |||
60 | Mf_Mix_Matches MixMatchesFunc; |
||
61 | |||
62 | /* LZ + BT */ |
||
63 | CMtSync btSync; |
||
64 | Byte btDummy[kMtCacheLineDummy]; |
||
65 | |||
66 | /* BT */ |
||
67 | UInt32 *hashBuf; |
||
68 | UInt32 hashBufPos; |
||
69 | UInt32 hashBufPosLimit; |
||
70 | UInt32 hashNumAvail; |
||
71 | |||
72 | CLzRef *son; |
||
73 | UInt32 matchMaxLen; |
||
74 | UInt32 numHashBytes; |
||
75 | UInt32 pos; |
||
76 | Byte *buffer; |
||
77 | UInt32 cyclicBufferPos; |
||
78 | UInt32 cyclicBufferSize; /* it must be historySize + 1 */ |
||
79 | UInt32 cutValue; |
||
80 | |||
81 | /* BT + Hash */ |
||
82 | CMtSync hashSync; |
||
83 | /* Byte hashDummy[kMtCacheLineDummy]; */ |
||
84 | |||
85 | /* Hash */ |
||
86 | Mf_GetHeads GetHeadsFunc; |
||
87 | CMatchFinder *MatchFinder; |
||
88 | } CMatchFinderMt; |
||
89 | |||
90 | void MatchFinderMt_Construct(CMatchFinderMt *p); |
||
91 | void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAlloc *alloc); |
||
92 | SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore, |
||
93 | UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc); |
||
94 | void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable); |
||
95 | void MatchFinderMt_ReleaseStream(CMatchFinderMt *p); |
||
96 | |||
97 | #endif |