X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.h;h=634fbc0d42ab680ada6b6569a70adf8d0aec7c5f;hb=bede30e7a658dbb5e013351c86f77c3fd4bc8537;hp=ba49b82bd91fcc954fc2524344f671c519e132e4;hpb=a695ed65a8b98c94a928862be76500485b38c414;p=stockfish diff --git a/src/position.h b/src/position.h index ba49b82b..634fbc0d 100644 --- a/src/position.h +++ b/src/position.h @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2008-2012 Marco Costalba, Joona Kiiski, 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 @@ -37,6 +37,7 @@ struct CheckInfo { Bitboard dcCandidates; Bitboard pinned; Bitboard checkSq[8]; + Square ksq; }; @@ -100,6 +101,7 @@ public: // The piece on a given square Piece piece_on(Square s) const; + Piece piece_moved(Move m) const; bool square_is_empty(Square s) const; // Side to move @@ -277,6 +279,10 @@ inline Piece Position::piece_on(Square s) const { return board[s]; } +inline Piece Position::piece_moved(Move m) const { + return board[from_sq(m)]; +} + inline bool Position::square_is_empty(Square s) const { return board[s] == NO_PIECE; } @@ -428,8 +434,8 @@ inline Value Position::non_pawn_material(Color c) const { inline bool Position::is_passed_pawn_push(Move m) const { - return board[move_from(m)] == make_piece(sideToMove, PAWN) - && pawn_is_passed(sideToMove, move_to(m)); + return board[from_sq(m)] == make_piece(sideToMove, PAWN) + && pawn_is_passed(sideToMove, to_sq(m)); } inline int Position::startpos_ply_counter() const { @@ -454,14 +460,14 @@ inline bool Position::is_chess960() const { inline bool Position::is_capture_or_promotion(Move m) const { assert(is_ok(m)); - return is_special(m) ? !is_castle(m) : !square_is_empty(move_to(m)); + return is_special(m) ? !is_castle(m) : !square_is_empty(to_sq(m)); } inline bool Position::is_capture(Move m) const { // Note that castle is coded as "king captures the rook" assert(is_ok(m)); - return (!square_is_empty(move_to(m)) && !is_castle(m)) || is_enpassant(m); + return (!square_is_empty(to_sq(m)) && !is_castle(m)) || is_enpassant(m); } inline PieceType Position::captured_piece_type() const {