Cute Chess
0.1
projects
lib
3rdparty
fathom
src
tbcore.h
1
/*
2
Copyright (c) 2011-2015 Ronald de Man
3
*/
4
5
#ifndef TBCORE_H
6
#define TBCORE_H
7
8
#ifndef _WIN32
9
#include <pthread.h>
10
#define SEP_CHAR ':'
11
#define FD int
12
#define FD_ERR -1
13
#else
14
#include <windows.h>
15
#define SEP_CHAR ';'
16
#define FD HANDLE
17
#define FD_ERR INVALID_HANDLE_VALUE
18
#endif
19
20
#ifdef TB_HAVE_THREADS
21
#ifndef _WIN32
22
#define LOCK_T pthread_mutex_t
23
#define LOCK_INIT(x) pthread_mutex_init(&(x), NULL)
24
#define LOCK(x) pthread_mutex_lock(&(x))
25
#define UNLOCK(x) pthread_mutex_unlock(&(x))
26
#else
27
#define LOCK_T HANDLE
28
#define LOCK_INIT(x) do { x = CreateMutex(NULL, FALSE, NULL); } while (0)
29
#define LOCK(x) WaitForSingleObject(x, INFINITE)
30
#define UNLOCK(x) ReleaseMutex(x)
31
#endif
32
#else
/* !TB_HAVE_THREADS */
33
#define LOCK_T int
34
#define LOCK_INIT(x)
/* NOP */
35
#define LOCK(x)
/* NOP */
36
#define UNLOCK(x)
/* NOP */
37
#endif
38
39
#define WDLSUFFIX ".rtbw"
40
#define DTZSUFFIX ".rtbz"
41
#define WDLDIR "RTBWDIR"
42
#define DTZDIR "RTBZDIR"
43
#define TBPIECES 6
44
45
#define WDL_MAGIC 0x5d23e871
46
#define DTZ_MAGIC 0xa50c66d7
47
48
#define TBHASHBITS 10
49
50
typedef
unsigned
long
long
uint64;
51
typedef
unsigned
int
uint32;
52
typedef
unsigned
char
ubyte;
53
typedef
unsigned
short
ushort;
54
55
struct
TBHashEntry
;
56
57
#ifdef DECOMP64
58
typedef
uint64 base_t;
59
#else
60
typedef
uint32 base_t;
61
#endif
62
63
struct
PairsData
{
64
char
*indextable;
65
ushort *sizetable;
66
ubyte *data;
67
ushort *offset;
68
ubyte *symlen;
69
ubyte *sympat;
70
int
blocksize;
71
int
idxbits;
72
int
min_len;
73
base_t base[1];
// C++ complains about base[]...
74
};
75
76
struct
TBEntry
{
77
char
*data;
78
uint64 key;
79
uint64 mapping;
80
ubyte ready;
81
ubyte num;
82
ubyte symmetric;
83
ubyte has_pawns;
84
}
85
#ifdef __GNUC__
86
__attribute__((__may_alias__));
87
#else
88
;
89
#endif
90
91
struct
TBEntry_piece
{
92
char
*data;
93
uint64 key;
94
uint64 mapping;
95
ubyte ready;
96
ubyte num;
97
ubyte symmetric;
98
ubyte has_pawns;
99
ubyte enc_type;
100
struct
PairsData
*precomp[2];
101
int
factor[2][TBPIECES];
102
ubyte pieces[2][TBPIECES];
103
ubyte norm[2][TBPIECES];
104
};
105
106
struct
TBEntry_pawn
{
107
char
*data;
108
uint64 key;
109
uint64 mapping;
110
ubyte ready;
111
ubyte num;
112
ubyte symmetric;
113
ubyte has_pawns;
114
ubyte pawns[2];
115
struct
{
116
struct
PairsData
*precomp[2];
117
int
factor[2][TBPIECES];
118
ubyte pieces[2][TBPIECES];
119
ubyte norm[2][TBPIECES];
120
} file[4];
121
};
122
123
struct
DTZEntry_piece
{
124
char
*data;
125
uint64 key;
126
uint64 mapping;
127
ubyte ready;
128
ubyte num;
129
ubyte symmetric;
130
ubyte has_pawns;
131
ubyte enc_type;
132
struct
PairsData
*precomp;
133
int
factor[TBPIECES];
134
ubyte pieces[TBPIECES];
135
ubyte norm[TBPIECES];
136
ubyte flags;
// accurate, mapped, side
137
ushort map_idx[4];
138
ubyte *map;
139
};
140
141
struct
DTZEntry_pawn
{
142
char
*data;
143
uint64 key;
144
uint64 mapping;
145
ubyte ready;
146
ubyte num;
147
ubyte symmetric;
148
ubyte has_pawns;
149
ubyte pawns[2];
150
struct
{
151
struct
PairsData
*precomp;
152
int
factor[TBPIECES];
153
ubyte pieces[TBPIECES];
154
ubyte norm[TBPIECES];
155
} file[4];
156
ubyte flags[4];
157
ushort map_idx[4][4];
158
ubyte *map;
159
};
160
161
struct
TBHashEntry
{
162
uint64 key;
163
struct
TBEntry
*ptr;
164
};
165
166
struct
DTZTableEntry
{
167
uint64 key1;
168
uint64 key2;
169
struct
TBEntry
*entry;
170
};
171
172
#endif
173
DTZEntry_pawn
Definition
tbcore.h:141
DTZEntry_piece
Definition
tbcore.h:123
DTZTableEntry
Definition
tbcore.h:166
PairsData
Definition
tbcore.h:63
TBEntry_pawn
Definition
tbcore.h:106
TBEntry_piece
Definition
tbcore.h:91
TBEntry
Definition
tbcore.h:76
TBHashEntry
Definition
tbcore.h:161
Generated by
1.16.1