Square ep_square() const;
bool empty(Square s) const;
template<PieceType Pt> int count(Color c) const;
+ template<PieceType Pt> int count() const;
template<PieceType Pt> const Square* squares(Color c) const;
template<PieceType Pt> Square square(Color c) const;
// Attacks to/from a given square
Bitboard attackers_to(Square s) const;
Bitboard attackers_to(Square s, Bitboard occupied) const;
- Bitboard attacks_from(Piece pc, Square s) const;
+ Bitboard attacks_from(PieceType pt, Square s) const;
template<PieceType> Bitboard attacks_from(Square s) const;
template<PieceType> Bitboard attacks_from(Square s, Color c) const;
Bitboard slider_blockers(Bitboard sliders, Square s, Bitboard& pinners) const;
int rule50_count() const;
Score psq_score() const;
Value non_pawn_material(Color c) const;
+ Value non_pawn_material() const;
// Position consistency check, for debugging
bool pos_is_ok(int* failedStep = nullptr) const;
return pieceCount[make_piece(c, Pt)];
}
+template<PieceType Pt> inline int Position::count() const {
+ return pieceCount[make_piece(WHITE, Pt)] + pieceCount[make_piece(BLACK, Pt)];
+}
+
template<PieceType Pt> inline const Square* Position::squares(Color c) const {
return pieceList[make_piece(c, Pt)];
}
template<PieceType Pt>
inline Bitboard Position::attacks_from(Square s) const {
+ assert(Pt != PAWN);
return Pt == BISHOP || Pt == ROOK ? attacks_bb<Pt>(s, byTypeBB[ALL_PIECES])
: Pt == QUEEN ? attacks_from<ROOK>(s) | attacks_from<BISHOP>(s)
- : StepAttacksBB[Pt][s];
+ : PseudoAttacks[Pt][s];
}
template<>
inline Bitboard Position::attacks_from<PAWN>(Square s, Color c) const {
- return StepAttacksBB[make_piece(c, PAWN)][s];
+ return PawnAttacks[c][s];
}
-inline Bitboard Position::attacks_from(Piece pc, Square s) const {
- return attacks_bb(pc, s, byTypeBB[ALL_PIECES]);
+inline Bitboard Position::attacks_from(PieceType pt, Square s) const {
+ return attacks_bb(pt, s, byTypeBB[ALL_PIECES]);
}
inline Bitboard Position::attackers_to(Square s) const {
return st->nonPawnMaterial[c];
}
+inline Value Position::non_pawn_material() const {
+ return st->nonPawnMaterial[WHITE] + st->nonPawnMaterial[BLACK];
+}
+
inline int Position::game_ply() const {
return gamePly;
}