Subversion Repositories Games.Chess Giants

Rev

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