-inline void Position::set_castle_queenside(Color c) {
- st->castleRights |= (WHITE_OOO << c);
-}
-
-inline Square Position::initial_kr_square(Color c) const {
- return relative_square(c, make_square(initialKRFile, RANK_1));
-}
-
-inline Square Position::initial_qr_square(Color c) const {
- return relative_square(c, make_square(initialQRFile, RANK_1));
+template<PieceType Pt>
+inline Bitboard Position::attacks_from(Square s) const {
+ return Pt == BISHOP ? bishop_attacks_bb(s, occupied_squares())
+ : Pt == ROOK ? rook_attacks_bb(s, occupied_squares())
+ : Pt == QUEEN ? attacks_from<ROOK>(s) | attacks_from<BISHOP>(s)
+ : StepAttacksBB[Pt][s];