X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftypes.h;h=b0758f437af06f61107eadba71e8a506b67b6f2d;hp=ab5e1b884864108912de21d311a02fe14e5afb5a;hb=893a08a8c2eac3c2e7d2216b51811cc7378e2239;hpb=213166ba225bcefbbe7dbecdacfd726dfb6c34f9 diff --git a/src/types.h b/src/types.h index ab5e1b88..b0758f43 100644 --- a/src/types.h +++ b/src/types.h @@ -2,7 +2,7 @@ Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad - Copyright (C) 2015-2018 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad + Copyright (C) 2015-2019 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -101,7 +101,7 @@ typedef uint64_t Key; typedef uint64_t Bitboard; constexpr int MAX_MOVES = 256; -constexpr int MAX_PLY = 128; +constexpr int MAX_PLY = 246; /// A move needs 16 bits to be stored /// @@ -141,14 +141,12 @@ enum CastlingRight { WHITE_OOO = WHITE_OO << 1, BLACK_OO = WHITE_OO << 2, BLACK_OOO = WHITE_OO << 3, - ANY_CASTLING = WHITE_OO | WHITE_OOO | BLACK_OO | BLACK_OOO, - CASTLING_RIGHT_NB = 16 -}; -template struct MakeCastling { - static constexpr CastlingRight - right = C == WHITE ? S == QUEEN_SIDE ? WHITE_OOO : WHITE_OO - : S == QUEEN_SIDE ? BLACK_OOO : BLACK_OO; + WHITE_CASTLING = WHITE_OO | WHITE_OOO, + BLACK_CASTLING = BLACK_OO | BLACK_OOO, + ANY_CASTLING = WHITE_CASTLING | BLACK_CASTLING, + + CASTLING_RIGHT_NB = 16 }; enum Phase { @@ -182,11 +180,11 @@ enum Value : int { VALUE_MATE_IN_MAX_PLY = VALUE_MATE - 2 * MAX_PLY, VALUE_MATED_IN_MAX_PLY = -VALUE_MATE + 2 * MAX_PLY, - PawnValueMg = 171, PawnValueEg = 240, - KnightValueMg = 764, KnightValueEg = 848, - BishopValueMg = 826, BishopValueEg = 891, - RookValueMg = 1282, RookValueEg = 1373, - QueenValueMg = 2500, QueenValueEg = 2670, + PawnValueMg = 128, PawnValueEg = 213, + KnightValueMg = 782, KnightValueEg = 865, + BishopValueMg = 830, BishopValueEg = 918, + RookValueMg = 1289, RookValueEg = 1378, + QueenValueMg = 2529, QueenValueEg = 2687, MidgameLimit = 15258, EndgameLimit = 3915 }; @@ -324,10 +322,10 @@ inline Value& operator+=(Value& v, int i) { return v = v + i; } inline Value& operator-=(Value& v, int i) { return v = v - i; } /// Additional operators to add a Direction to a Square -inline Square operator+(Square s, Direction d) { return Square(int(s) + int(d)); } -inline Square operator-(Square s, Direction d) { return Square(int(s) - int(d)); } -inline Square& operator+=(Square &s, Direction d) { return s = s + d; } -inline Square& operator-=(Square &s, Direction d) { return s = s - d; } +constexpr Square operator+(Square s, Direction d) { return Square(int(s) + int(d)); } +constexpr Square operator-(Square s, Direction d) { return Square(int(s) - int(d)); } +inline Square& operator+=(Square& s, Direction d) { return s = s + d; } +inline Square& operator-=(Square& s, Direction d) { return s = s - d; } /// Only declared but not defined. We don't want to multiply two scores due to /// a very high risk of overflow. So user should explicitly convert to integer. @@ -345,7 +343,7 @@ inline Score operator*(Score s, int i) { assert(eg_value(result) == (i * eg_value(s))); assert(mg_value(result) == (i * mg_value(s))); - assert((i == 0) || (result / i) == s ); + assert((i == 0) || (result / i) == s); return result; } @@ -419,11 +417,6 @@ constexpr Rank relative_rank(Color c, Square s) { return relative_rank(c, rank_of(s)); } -inline bool opposite_colors(Square s1, Square s2) { - int s = int(s1) ^ int(s2); - return ((s >> 3) ^ s) & 1; -} - constexpr Direction pawn_push(Color c) { return c == WHITE ? NORTH : SOUTH; } @@ -448,7 +441,7 @@ constexpr PieceType promotion_type(Move m) { return PieceType(((m >> 12) & 3) + KNIGHT); } -inline Move make_move(Square from, Square to) { +constexpr Move make_move(Square from, Square to) { return Move((from << 6) + to); }