X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=403ce398ddbbcfe93669de28422f23e1577a61f6;hp=22afb3e13278be4e09d8f363e445bcbf4a75864c;hb=820c5c25b649d6bdd51bed14a16efdc11719b588;hpb=05513a66410f96959f3a6e70be9aea72425cf7c7 diff --git a/src/position.h b/src/position.h index 22afb3e1..403ce398 100644 --- a/src/position.h +++ b/src/position.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-2017 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad + Copyright (C) 2015-2018 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 @@ -56,7 +56,10 @@ struct StateInfo { Bitboard checkSquares[PIECE_TYPE_NB]; }; -// In a std::deque references to elements are unaffected upon resizing +/// A list to keep track of the position states along the setup moves (from the +/// start position to the position just before the search starts). Needed by +/// 'draw by repetition' detection. Use a std::deque because pointers to +/// elements are not invalidated upon list resizing. typedef std::unique_ptr> StateListPtr; @@ -112,6 +115,7 @@ public: Bitboard attacks_from(PieceType pt, Square s) const; template Bitboard attacks_from(Square s) const; template Bitboard attacks_from(Square s, Color c) const; + template Bitboard pawn_attacks(Bitboard b) const; Bitboard slider_blockers(Bitboard sliders, Square s, Bitboard& pinners) const; // Properties of moves @@ -146,7 +150,6 @@ public: // Other properties of the position Color side_to_move() const; - Phase game_phase() const; int game_ply() const; bool is_chess960() const; Thread* this_thread() const; @@ -286,6 +289,12 @@ inline Bitboard Position::attacks_from(PieceType pt, Square s) const { return attacks_bb(pt, s, byTypeBB[ALL_PIECES]); } +template +inline Bitboard Position::pawn_attacks(Bitboard b) const { + return c == WHITE ? shift(b) | shift(b) + : shift(b) | shift(b); +} + inline Bitboard Position::attackers_to(Square s) const { return attackers_to(s, byTypeBB[ALL_PIECES]); }