44#include < vector>
55#include < cstdint>
66#include < cstring>
7- #include " tt.hpp"
87#if __cplusplus >= 202002L
98#define POPCOUNT64 (bits ) std::popcount(bits);
109#elif defined(USE_POPCNT)
@@ -214,102 +213,10 @@ namespace chess
214213 MoveStack move_stack;
215214 };
216215};
217-
218- using U64 = uint64_t ;
219-
220- // Constants for board files
221- constexpr U64 FILE_A = 0x0101010101010101ULL , RANK_1 = 0xff ;
222- constexpr U64 FILE_B = FILE_A << 1 , RANK_2 = RANK_1 << 8 ;
223- constexpr U64 FILE_C = FILE_A << 2 , RANK_3 = RANK_2 << 8 ;
224- constexpr U64 FILE_D = FILE_A << 3 , RANK_4 = RANK_3 << 8 ;
225- constexpr U64 FILE_E = FILE_A << 4 , RANK_5 = RANK_4 << 8 ;
226- constexpr U64 FILE_F = FILE_A << 5 , RANK_6 = RANK_5 << 8 ;
227- constexpr U64 FILE_G = FILE_A << 6 , RANK_7 = RANK_6 << 8 ;
228- constexpr U64 FILE_H = FILE_A << 7 , RANK_8 = RANK_7 << 8 ;
229-
230- constexpr U64 FILES [8 ] = {FILE_A , FILE_B , FILE_C , FILE_D , FILE_E , FILE_F , FILE_G , FILE_H };
231- typedef unsigned long long Bitboard;
232- typedef char Square;
233-
234- // Shift functions for pawn movement
235- inline U64 north (U64 b) { return b << 8 ; }
236- inline U64 south (U64 b) { return b >> 8 ; }
237- inline U64 east (U64 b) { return (b & ~FILE_H ) << 1 ; }
238- inline U64 west (U64 b) { return (b & ~FILE_A ) >> 1 ; }
239- inline U64 northEast (U64 b) { return (b & ~FILE_H ) << 9 ; }
240- inline U64 northWest (U64 b) { return (b & ~FILE_A ) << 7 ; }
241- inline U64 southEast (U64 b) { return (b & ~FILE_H ) >> 7 ; }
242- inline U64 southWest (U64 b) { return (b & ~FILE_A ) >> 9 ; }
243- #define getQueenAttacks (a, b ) chess::attacks::queen(a, b).getBits()
244- #define getKnightAttacks (a, ...) chess::attacks::knight(a).getBits()
245- #define getKingAttacks (a, friendlyPieces ) (chess::attacks::king(a).getBits() & ~(friendlyPieces))
246- #define getRookAttacks (a, b ) chess::attacks::rook(a, b).getBits()
247- #define getBishopAttacks (a, b ) chess::attacks::bishop(a, b).getBits()
248- #define getPawnAttacks (a, b ) chess::attacks::pawn(a, b).getBits()
249216#define MAX_PLY 245
250- #define MAX 32767 // for black
251217#define MAX_MATE 31999
218+ #define MAX_SCORE_CP 31000
252219#define MATE (i ) MAX_MATE -i
253220#define MATE_DISTANCE (i ) (i - MAX_MATE )
254- int eval (chess::Position &RESTRICT board);
255- int piece_value (chess::PieceType piece);
256- // Define enum class for evaluation keys
257- enum class EvalKey
258- {
259- DOUBLED ,
260- BACKWARD ,
261- BLOCKED ,
262- ISLANDED ,
263- ISOLATED ,
264- DBLISOLATED ,
265- WEAK ,
266- PAWNRACE ,
267- SHIELD ,
268- STORM ,
269- OUTPOST ,
270- LEVER ,
271- PAWNRAM ,
272- OPENPAWN ,
273- HOLES ,
274- UNDEV_KNIGHT ,
275- UNDEV_BISHOP ,
276- UNDEV_ROOK ,
277- DEV_QUEEN ,
278- OPEN_FILES ,
279- SEMI_OPEN_FILES ,
280- FIANCHETTO ,
281- TRAPPED ,
282- KEY_CENTER ,
283- SPACE ,
284- BADBISHOP ,
285- WEAKCOVER ,
286- MISSINGPAWN ,
287- ATTACK_ENEMY ,
288- K_OPENING ,
289- K_MIDDLE ,
290- K_END ,
291- PINNED ,
292- SKEWERED ,
293- DISCOVERED ,
294- FORK ,
295- TEMPO_FREEDOM_WEIGHT ,
296- TEMPO_OPPONENT_MOBILITY_PENALTY ,
297- UNDERPROMOTE ,
298- PAWN ,
299- KNIGHT ,
300- BISHOP ,
301- ROOK ,
302- QUEEN ,
303- COUNTER
304- };
305- // Struct to hold evaluation weights
306- struct EvalWeights
307- {
308- static const std::unordered_map<EvalKey, int > weights;
309-
310- static int getWeight (EvalKey key)
311- {
312- auto it = weights.find (key);
313- return (it != weights.end ()) ? it->second : 0 ; // Default if key not found
314- }
315- };
221+ int eval (chess::Position &board);
222+ constexpr int16_t ASPIRATION_DELTA = 30 ;
0 commit comments