37typedef unsigned char uint8_t;
38typedef unsigned short uint16_t;
39typedef unsigned uint32_t;
40typedef long long unsigned uint64_t;
44typedef long long int64_t;
60extern bool tb_init_impl(
const char *_path);
61extern unsigned tb_probe_wdl_impl(
72extern unsigned tb_probe_root_impl(
90#define TB_MAX_MOVES (192+1)
92#define TB_CASTLING_K 0x1
93#define TB_CASTLING_Q 0x2
94#define TB_CASTLING_k 0x4
95#define TB_CASTLING_q 0x8
98#define TB_BLESSED_LOSS 1
100#define TB_CURSED_WIN 3
103#define TB_PROMOTES_NONE 0
104#define TB_PROMOTES_QUEEN 1
105#define TB_PROMOTES_ROOK 2
106#define TB_PROMOTES_BISHOP 3
107#define TB_PROMOTES_KNIGHT 4
109#define TB_RESULT_WDL_MASK 0x0000000F
110#define TB_RESULT_TO_MASK 0x000003F0
111#define TB_RESULT_FROM_MASK 0x0000FC00
112#define TB_RESULT_PROMOTES_MASK 0x00070000
113#define TB_RESULT_EP_MASK 0x00080000
114#define TB_RESULT_DTZ_MASK 0xFFF00000
115#define TB_RESULT_WDL_SHIFT 0
116#define TB_RESULT_TO_SHIFT 4
117#define TB_RESULT_FROM_SHIFT 10
118#define TB_RESULT_PROMOTES_SHIFT 16
119#define TB_RESULT_EP_SHIFT 19
120#define TB_RESULT_DTZ_SHIFT 20
122#define TB_GET_WDL(_res) \
123 (((_res) & TB_RESULT_WDL_MASK) >> TB_RESULT_WDL_SHIFT)
124#define TB_GET_TO(_res) \
125 (((_res) & TB_RESULT_TO_MASK) >> TB_RESULT_TO_SHIFT)
126#define TB_GET_FROM(_res) \
127 (((_res) & TB_RESULT_FROM_MASK) >> TB_RESULT_FROM_SHIFT)
128#define TB_GET_PROMOTES(_res) \
129 (((_res) & TB_RESULT_PROMOTES_MASK) >> TB_RESULT_PROMOTES_SHIFT)
130#define TB_GET_EP(_res) \
131 (((_res) & TB_RESULT_EP_MASK) >> TB_RESULT_EP_SHIFT)
132#define TB_GET_DTZ(_res) \
133 (((_res) & TB_RESULT_DTZ_MASK) >> TB_RESULT_DTZ_SHIFT)
135#define TB_SET_WDL(_res, _wdl) \
136 (((_res) & ~TB_RESULT_WDL_MASK) | \
137 (((_wdl) << TB_RESULT_WDL_SHIFT) & TB_RESULT_WDL_MASK))
138#define TB_SET_TO(_res, _to) \
139 (((_res) & ~TB_RESULT_TO_MASK) | \
140 (((_to) << TB_RESULT_TO_SHIFT) & TB_RESULT_TO_MASK))
141#define TB_SET_FROM(_res, _from) \
142 (((_res) & ~TB_RESULT_FROM_MASK) | \
143 (((_from) << TB_RESULT_FROM_SHIFT) & TB_RESULT_FROM_MASK))
144#define TB_SET_PROMOTES(_res, _promotes) \
145 (((_res) & ~TB_RESULT_PROMOTES_MASK) | \
146 (((_promotes) << TB_RESULT_PROMOTES_SHIFT) & TB_RESULT_PROMOTES_MASK))
147#define TB_SET_EP(_res, _ep) \
148 (((_res) & ~TB_RESULT_EP_MASK) | \
149 (((_ep) << TB_RESULT_EP_SHIFT) & TB_RESULT_EP_MASK))
150#define TB_SET_DTZ(_res, _dtz) \
151 (((_res) & ~TB_RESULT_DTZ_MASK) | \
152 (((_dtz) << TB_RESULT_DTZ_SHIFT) & TB_RESULT_DTZ_MASK))
154#define TB_RESULT_CHECKMATE TB_SET_WDL(0, TB_WIN)
155#define TB_RESULT_STALEMATE TB_SET_WDL(0, TB_DRAW)
156#define TB_RESULT_FAILED 0xFFFFFFFF
161extern unsigned TB_LARGEST;
175static inline bool tb_init(
const char *_path)
177 return tb_init_impl(_path);
204static inline unsigned tb_probe_wdl(
219 return TB_RESULT_FAILED;
221 return TB_RESULT_FAILED;
222 return tb_probe_wdl_impl(_white, _black, _kings, _queens, _rooks,
223 _bishops, _knights, _pawns, _ep, _turn);
271static inline unsigned tb_probe_root(
287 return TB_RESULT_FAILED;
288 return tb_probe_root_impl(_white, _black, _kings, _queens, _rooks,
289 _bishops, _knights, _pawns, _rule50, _ep, _turn, _results);
302#ifndef TB_NO_HELPER_API
304extern unsigned tb_pop_count(uint64_t _bb);
305extern unsigned tb_lsb(uint64_t _bb);
306extern uint64_t tb_pop_lsb(uint64_t _bb);
307extern uint64_t tb_king_attacks(
unsigned _square);
308extern uint64_t tb_queen_attacks(
unsigned _square, uint64_t _occ);
309extern uint64_t tb_rook_attacks(
unsigned _square, uint64_t _occ);
310extern uint64_t tb_bishop_attacks(
unsigned _square, uint64_t _occ);
311extern uint64_t tb_knight_attacks(
unsigned _square);
312extern uint64_t tb_pawn_attacks(
unsigned _square,
bool _color);