Bitboard dcCandidates;
Bitboard pinned;
- Bitboard checkSq[PIECE_TYPE_NB];
+ Bitboard checkSquares[PIECE_TYPE_NB];
Square ksq;
};
Bitboard pieces(Color c, PieceType pt) const;
Bitboard pieces(Color c, PieceType pt1, PieceType pt2) const;
Piece piece_on(Square s) const;
- Square king_square(Color c) const;
Square ep_square() const;
bool empty(Square s) const;
template<PieceType Pt> int count(Color c) const;
- template<PieceType Pt> const Square* list(Color c) const;
+ template<PieceType Pt> const Square* squares(Color c) const;
+ template<PieceType Pt> Square square(Color c) const;
// Castling
int can_castle(Color c) const;
// Piece specific
bool pawn_passed(Color c, Square s) const;
- bool pawn_on_7th(Color c) const;
bool opposite_bishops() const;
// Doing and undoing moves
return pieceCount[c][Pt];
}
-template<PieceType Pt> inline const Square* Position::list(Color c) const {
+template<PieceType Pt> inline const Square* Position::squares(Color c) const {
return pieceList[c][Pt];
}
-inline Square Position::king_square(Color c) const {
- return pieceList[c][KING][0];
+template<PieceType Pt> inline Square Position::square(Color c) const {
+ assert(pieceCount[c][Pt] == 1);
+ return pieceList[c][Pt][0];
}
inline Square Position::ep_square() const {
inline bool Position::opposite_bishops() const {
return pieceCount[WHITE][BISHOP] == 1
&& pieceCount[BLACK][BISHOP] == 1
- && opposite_colors(pieceList[WHITE][BISHOP][0], pieceList[BLACK][BISHOP][0]);
-}
-
-inline bool Position::pawn_on_7th(Color c) const {
- return pieces(c, PAWN) & rank_bb(relative_rank(c, RANK_7));
+ && opposite_colors(square<BISHOP>(WHITE), square<BISHOP>(BLACK));
}
inline bool Position::is_chess960() const {