]> git.sesse.net Git - stockfish/blobdiff - src/position.h
Refactor Position::pinned_pieces() to use templates
[stockfish] / src / position.h
index 4dcbbf76ec80b24531fe414820fb7fe0781f8dc4..5ae75655658fc69276391a6aafcf4b5d02453c45 100644 (file)
@@ -1,13 +1,14 @@
 /*
-  Glaurung, a UCI chess playing engine.
-  Copyright (C) 2004-2008 Tord Romstad
+  Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+  Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
+  Copyright (C) 2008 Marco Costalba
 
-  Glaurung is free software: you can redistribute it and/or modify
+  Stockfish is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   
-  Glaurung is distributed in the hope that it will be useful,
+  Stockfish is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
@@ -171,11 +172,6 @@ public:
 
   // Number of pieces of each color and type
   int piece_count(Color c, PieceType pt) const;
-  int pawn_count(Color c) const;
-  int knight_count(Color c) const;
-  int bishop_count(Color c) const;
-  int rook_count(Color c) const;
-  int queen_count(Color c) const;
 
   // The en passant square:
   Square ep_square() const;
@@ -201,6 +197,8 @@ public:
   // Bitboards for pinned pieces and discovered check candidates
   Bitboard discovered_check_candidates(Color c) const;
   Bitboard pinned_pieces(Color c) const;
+  template<PieceType Piece>
+  Bitboard pinned_pieces(Color c, Square ksq) const;
 
   // Checking pieces
   Bitboard checkers() const;
@@ -213,8 +211,7 @@ public:
   Bitboard attacks_to(Square s) const;
   Bitboard attacks_to(Square s, Color c) const;
   bool is_check() const;
-  bool white_pawn_attacks_square(Square f, Square t) const;
-  bool black_pawn_attacks_square(Square f, Square t) const;
+  bool pawn_attacks_square(Color c, Square f, Square t) const;
 
   template<PieceType>
   Bitboard piece_attacks_square(Square f, Square t) const; // Dispatch at compile-time
@@ -492,26 +489,6 @@ inline int Position::piece_count(Color c, PieceType pt) const {
   return pieceCount[c][pt];
 }
 
-inline int Position::pawn_count(Color c) const {
-  return piece_count(c, PAWN);
-}
-
-inline int Position::knight_count(Color c) const {
-  return piece_count(c, KNIGHT);
-}
-
-inline int Position::bishop_count(Color c) const {
-  return piece_count(c, BISHOP);
-}
-
-inline int Position::rook_count(Color c) const {
-  return piece_count(c, ROOK);
-}
-
-inline int Position::queen_count(Color c) const {
-  return piece_count(c, QUEEN);
-}
-
 inline Square Position::piece_list(Color c, PieceType pt, int index) const {
   return pieceList[c][pt][index];
 }
@@ -578,15 +555,11 @@ inline Bitboard Position::checkers() const {
 }
 
 inline bool Position::is_check() const {
-  return checkers() != EmptyBoardBB;
-}
-
-inline bool Position::white_pawn_attacks_square(Square f, Square t) const {
-  return bit_is_set(pawn_attacks(WHITE, f), t);
+  return checkersBB != EmptyBoardBB;
 }
 
-inline bool Position::black_pawn_attacks_square(Square f, Square t) const {
-  return bit_is_set(pawn_attacks(BLACK, f), t);
+inline bool Position::pawn_attacks_square(Color c, Square f, Square t) const {
+  return bit_is_set(pawn_attacks(c, f), t);
 }
 
 template<PieceType Piece>
@@ -712,8 +685,8 @@ inline int Position::rule_50_counter() const {
 
 inline bool Position::opposite_colored_bishops() const {
 
-  return   bishop_count(WHITE) == 1
-        && bishop_count(BLACK) == 1        
+  return   piece_count(WHITE, BISHOP) == 1
+        && piece_count(BLACK, BISHOP) == 1        
         && square_color(piece_list(WHITE, BISHOP, 0)) != square_color(piece_list(BLACK, BISHOP, 0));
 }