X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fposition.h;h=2762d2f88f72392b35db97b33669b349c6164488;hb=7622793080dab91375acc43da56852e28c8306fe;hp=9737d7614981756382ab2fc150f149fa24f95c2b;hpb=5b1316f7bbb259b87cecc276e4a1ce78b1a0e51b;p=stockfish diff --git a/src/position.h b/src/position.h index 9737d761..2762d2f8 100644 --- a/src/position.h +++ b/src/position.h @@ -127,6 +127,11 @@ class Position { friend class EndgameFunctions; public: + enum GamePhase { + MidGame, + EndGame + }; + // Constructors Position() {}; Position(const Position& pos); @@ -239,12 +244,13 @@ public: // Information about pawns bool pawn_is_passed(Color c, Square s) const; - bool pawn_is_isolated(Color c, Square s) const; - bool pawn_is_doubled(Color c, Square s) const; + static bool pawn_is_passed(Bitboard theirPawns, Color c, Square s); + static bool pawn_is_isolated(Bitboard ourPawns, Square s); + static bool pawn_is_doubled(Bitboard ourPawns, Color c, Square s); // Open and half-open files - bool file_is_open(File f) const; - bool file_is_half_open(Color c, File f) const; + static bool file_is_open(Bitboard pawns, File f); + static bool file_is_half_open(Bitboard pawns, File f); // Weak squares bool square_is_weak(Square s, Color c) const; @@ -272,7 +278,7 @@ public: Value eg_value() const; Value non_pawn_material(Color c) const; Phase game_phase() const; - Value mg_pst_delta(Move m) const; + template Value pst_delta(Piece piece, Square from, Square to) const; // Game termination checks bool is_mate() const; @@ -328,10 +334,6 @@ private: Key compute_material_key() const; // Computing incremental evaluation scores and material counts - enum GamePhase { - MidGame, - EndGame - }; template Value pst(Color c, PieceType pt, Square s) const; template Value compute_value() const; Value compute_non_pawn_material(Color c) const; @@ -590,20 +592,24 @@ inline bool Position::pawn_is_passed(Color c, Square s) const { return !(pawns(opposite_color(c)) & passed_pawn_mask(c, s)); } -inline bool Position::pawn_is_isolated(Color c, Square s) const { - return !(pawns(c) & neighboring_files_bb(s)); +inline bool Position::pawn_is_passed(Bitboard theirPawns, Color c, Square s) { + return !(theirPawns & passed_pawn_mask(c, s)); +} + +inline bool Position::pawn_is_isolated(Bitboard ourPawns, Square s) { + return !(ourPawns & neighboring_files_bb(s)); } -inline bool Position::pawn_is_doubled(Color c, Square s) const { - return pawns(c) & squares_behind(c, s); +inline bool Position::pawn_is_doubled(Bitboard ourPawns, Color c, Square s) { + return ourPawns & squares_behind(c, s); } -inline bool Position::file_is_open(File f) const { - return !(pawns() & file_bb(f)); +inline bool Position::file_is_open(Bitboard pawns, File f) { + return !(pawns & file_bb(f)); } -inline bool Position::file_is_half_open(Color c, File f) const { - return !(pawns(c) & file_bb(f)); +inline bool Position::file_is_half_open(Bitboard pawns, File f) { + return !(pawns & file_bb(f)); } inline bool Position::square_is_weak(Square s, Color c) const { @@ -622,15 +628,16 @@ inline Key Position::get_material_key() const { return st->materialKey; } -template +template inline Value Position::pst(Color c, PieceType pt, Square s) const { - return (Phase == MidGame ? MgPieceSquareTable[piece_of_color_and_type(c, pt)][s] - : EgPieceSquareTable[piece_of_color_and_type(c, pt)][s]); + return (Ph == MidGame ? MgPieceSquareTable[piece_of_color_and_type(c, pt)][s] + : EgPieceSquareTable[piece_of_color_and_type(c, pt)][s]); } -inline Value Position::mg_pst_delta(Move m) const { - return MgPieceSquareTable[piece_on(move_from(m))][move_to(m)] - -MgPieceSquareTable[piece_on(move_from(m))][move_from(m)]; +template +inline Value Position::pst_delta(Piece piece, Square from, Square to) const { + return (Ph == MidGame ? MgPieceSquareTable[piece][to] - MgPieceSquareTable[piece][from] + : EgPieceSquareTable[piece][to] - EgPieceSquareTable[piece][from]); } inline Value Position::mg_value() const {