return b & SetMaskBB[s];
}
-inline void set_bit(Bitboard *b, Square s) {
+inline void set_bit(Bitboard* b, Square s) {
*b |= SetMaskBB[s];
}
-inline void clear_bit(Bitboard *b, Square s) {
+inline void clear_bit(Bitboard* b, Square s) {
*b &= ClearMaskBB[s];
}
return SetMaskBB[from] | SetMaskBB[to];
}
-inline void do_move_bb(Bitboard *b, Bitboard move_bb) {
+inline void do_move_bb(Bitboard* b, Bitboard move_bb) {
*b ^= move_bb;
}
/// king) pieces for the given color. Or, when template parameter FindPinned is
/// false, the function return the pieces of the given color candidate for a
/// discovery check against the enemy king.
-
template<bool FindPinned>
Bitboard Position::hidden_checkers() const {
return result;
}
+// Explicit template instantiations
+template Bitboard Position::hidden_checkers<true>() const;
+template Bitboard Position::hidden_checkers<false>() const;
-/// Position:pinned_pieces() returns a bitboard of all pinned (against the
-/// king) pieces for the side to move.
-
-Bitboard Position::pinned_pieces() const {
-
- return hidden_checkers<true>();
-}
-
-
-/// Position:discovered_check_candidates() returns a bitboard containing all
-/// pieces for the side to move which are candidates for giving a discovered
-/// check.
-
-Bitboard Position::discovered_check_candidates() const {
-
- return hidden_checkers<false>();
-}
/// Position::attackers_to() computes a bitboard of all pieces which attacks a
/// given square. Slider attacks use occ bitboard as occupancy.
| (attacks_from<KING>(s) & pieces(KING));
}
+
/// Position::attacks_from() computes a bitboard of all attacks of a given piece
/// put in a given square. Slider attacks use occ bitboard as occupancy.
/// Position::move_is_legal() takes a random move and tests whether the move
-/// is legal. This version is not very fast and should be used only
-/// in non time-critical paths.
+/// is legal. This version is not very fast and should be used only in non
+/// time-critical paths.
bool Position::move_is_legal(const Move m) const {
void set_castle_right(Square ksq, Square rsq);
bool move_is_legal(const Move m) const;
- // Helper functions for doing and undoing moves
+ // Helper template functions
template<bool Do> void do_castle_move(Move m);
-
- template<bool FindPinned>
- Bitboard hidden_checkers() const;
+ template<bool FindPinned> Bitboard hidden_checkers() const;
// Computing hash keys from scratch (for initialization and debugging)
Key compute_key() const;
return st->checkersBB != 0;
}
+inline Bitboard Position::discovered_check_candidates() const {
+ return hidden_checkers<false>();
+}
+
+inline Bitboard Position::pinned_pieces() const {
+ return hidden_checkers<true>();
+}
+
inline bool Position::pawn_is_passed(Color c, Square s) const {
return !(pieces(PAWN, flip(c)) & passed_pawn_mask(c, s));
}