int castleRights, rule50;
Square epSquare;
Value mgValue, egValue;
+ Value npMaterial[2];
PieceType capture;
Bitboard checkersBB;
Color sideToMove;
int gamePly;
Key history[MaxGameLength];
- Value npMaterial[2];
File initialKFile, initialKRFile, initialQRFile;
StateInfo startState;
StateInfo* st;
return bishops_and_queens() & pieces_of_color(c);
}
-inline Bitboard Position::sliders_of_color(Color c) const {
- return sliders() & pieces_of_color(c);
-}
-
inline int Position::piece_count(Color c, PieceType pt) const {
return pieceCount[c][pt];
}
return StepAttackBB[piece_of_color_and_type(c, PAWN)][s];
}
-template<>
-inline Bitboard Position::piece_attacks<PAWN>(Square s) const {
- return StepAttackBB[piece_of_color_and_type(opposite_color(sideToMove), PAWN)][s];
+template<PieceType Piece> // Knight and King
+inline Bitboard Position::piece_attacks(Square s) const {
+ return StepAttackBB[Piece][s];
}
template<>
-inline Bitboard Position::piece_attacks<KNIGHT>(Square s) const {
- return StepAttackBB[KNIGHT][s];
+inline Bitboard Position::piece_attacks<PAWN>(Square s) const {
+ return StepAttackBB[piece_of_color_and_type(opposite_color(sideToMove), PAWN)][s];
}
template<>
return piece_attacks<ROOK>(s) | piece_attacks<BISHOP>(s);
}
-template<>
-inline Bitboard Position::piece_attacks<KING>(Square s) const {
- return StepAttackBB[KING][s];
-}
-
inline Bitboard Position::checkers() const {
return st->checkersBB;
}
}
inline Value Position::non_pawn_material(Color c) const {
- return npMaterial[c];
+ return st->npMaterial[c];
}
inline Phase Position::game_phase() const {