X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftypes.h;h=543b38a84752faa6ab3844504e8ecd48d2aee381;hp=5fee1786f77564b060afbc3719a3f21f134fa8fb;hb=bc83515c9e821016d2113298ef988e99ceced1af;hpb=f4dcec0b942703cf0e9bad1da7e64dfa252e915d diff --git a/src/types.h b/src/types.h index 5fee1786..543b38a8 100644 --- a/src/types.h +++ b/src/types.h @@ -100,9 +100,8 @@ const bool Is64Bit = false; typedef uint64_t Key; typedef uint64_t Bitboard; -const int MAX_MOVES = 256; -const int MAX_PLY = 120; -const int MAX_PLY_PLUS_6 = MAX_PLY + 6; +const int MAX_MOVES = 256; +const int MAX_PLY = 128; /// A move needs 16 bits to be stored /// @@ -211,14 +210,14 @@ enum Piece { enum Depth { - ONE_PLY = 2, + ONE_PLY = 1, - DEPTH_ZERO = 0 * ONE_PLY, - DEPTH_QS_CHECKS = 0 * ONE_PLY, - DEPTH_QS_NO_CHECKS = -1 * ONE_PLY, - DEPTH_QS_RECAPTURES = -5 * ONE_PLY, + DEPTH_ZERO = 0, + DEPTH_QS_CHECKS = 0, + DEPTH_QS_NO_CHECKS = -1, + DEPTH_QS_RECAPTURES = -5, - DEPTH_NONE = -127 * ONE_PLY + DEPTH_NONE = -6 }; enum Square { @@ -255,6 +254,7 @@ enum Rank { RANK_1, RANK_2, RANK_3, RANK_4, RANK_5, RANK_6, RANK_7, RANK_8, RANK_NB }; +template inline T dist(T x, T y) { return x < y ? y - x : x - y; } /// The Score enum stores a middlegame and an endgame value in a single integer /// (enum). The least significant 16 bits are used to store the endgame value @@ -267,28 +267,17 @@ enum Score { SCORE_ENSURE_INTEGER_SIZE_N = INT_MIN }; -typedef union { - uint32_t full; - struct { int16_t eg, mg; } half; -} ScoreView; - -inline Score make_score(int mg, int eg) { - ScoreView v; - v.half.mg = (int16_t)(mg - (uint16_t(eg) >> 15)); - v.half.eg = (int16_t)eg; - return Score(v.full); -} +inline Score make_score(int mg, int eg) { return Score((mg << 16) + eg); } +/// Extracting the signed lower and upper 16 bits is not so trivial because +/// according to the standard a simple cast to short is implementation defined +/// and so is a right shift of a signed integer. inline Value mg_value(Score s) { - ScoreView v; - v.full = s; - return Value(v.half.mg + (uint16_t(v.half.eg) >> 15)); + return Value(((s + 0x8000) & ~0xffff) / 0x10000); } inline Value eg_value(Score s) { - ScoreView v; - v.full = s; - return Value(v.half.eg); + return Value((int)(unsigned(s) & 0x7FFFU) - (int)(unsigned(s) & 0x8000U)); } #define ENABLE_BASE_OPERATORS_ON(T) \ @@ -337,6 +326,8 @@ inline Score operator/(Score s, int i) { return make_score(mg_value(s) / i, eg_value(s) / i); } +CACHE_LINE_ALIGNMENT + extern Value PieceValue[PHASE_NB][PIECE_NB]; struct ExtMove { @@ -414,14 +405,6 @@ inline bool opposite_colors(Square s1, Square s2) { return ((s >> 3) ^ s) & 1; } -inline char to_char(File f, bool tolower = true) { - return char(f - FILE_A + (tolower ? 'a' : 'A')); -} - -inline char to_char(Rank r) { - return char(r - RANK_1 + '1'); -} - inline Square pawn_push(Color c) { return c == WHITE ? DELTA_N : DELTA_S; } @@ -455,11 +438,4 @@ inline bool is_ok(Move m) { return from_sq(m) != to_sq(m); // Catches also MOVE_NULL and MOVE_NONE } -#include - -inline const std::string to_string(Square s) { - char ch[] = { to_char(file_of(s)), to_char(rank_of(s)), 0 }; - return ch; -} - #endif // #ifndef TYPES_H_INCLUDED