|
@@ -271,7 +271,7 @@ void chessy::generatePawnCaptures(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generatePawnPromotions(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
PromotionGenerator<side> pg{ cg };
|
|
@@ -280,7 +280,7 @@ void chessy::generatePawnPromotions(const ChessGame& cg, std::vector<Move>& move
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generateKnightMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
const Board& b = cg.getBoard();
|
|
@@ -294,7 +294,7 @@ void chessy::generateKnightMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side, typename Generator>
|
|
|
+template<Side side, bool capturesOnly, typename Generator>
|
|
|
void generateMoves(Bitboard position, Bitboard enemies, Bitboard friendly,
|
|
|
std::vector<Move>& moves)
|
|
|
{
|
|
@@ -308,37 +308,37 @@ void generateMoves(Bitboard position, Bitboard enemies, Bitboard friendly,
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generateQueenMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
const Board& b = cg.getBoard();
|
|
|
- generateMoves<side, PrimitiveQueenMoveGenerator>(
|
|
|
+ generateMoves<side, capturesOnly, PrimitiveQueenMoveGenerator>(
|
|
|
b.getQueens<side>(), b.get<otherSide(side)>(), b.get<side>(), moves
|
|
|
);
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generateRookMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
const Board& b = cg.getBoard();
|
|
|
- generateMoves<side, PrimitiveRookMoveGenerator>(
|
|
|
+ generateMoves<side, capturesOnly, PrimitiveRookMoveGenerator>(
|
|
|
b.getRooks<side>(), b.get<otherSide(side)>(), b.get<side>(), moves
|
|
|
);
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generateBishopMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
const Board& b = cg.getBoard();
|
|
|
- generateMoves<side,PrimitiveBishopMoveGenerator>(
|
|
|
+ generateMoves<side, capturesOnly, PrimitiveBishopMoveGenerator>(
|
|
|
b.getBishops<side>(), b.get<otherSide(side)>(), b.get<side>(), moves
|
|
|
);
|
|
|
}
|
|
|
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generateKingMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
const Board& b = cg.getBoard();
|
|
@@ -388,18 +388,18 @@ void chessy::generateEnPassant(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-template<Side side>
|
|
|
+template<Side side, bool capturesOnly>
|
|
|
void chessy::generateAllMoves(const ChessGame& cg, std::vector<Move>& moves)
|
|
|
{
|
|
|
generatePawnPushes<side>(cg, moves);
|
|
|
generatePawnDoublePushes<side>(cg, moves);
|
|
|
generatePawnCaptures<side>(cg, moves);
|
|
|
- generatePawnPromotions<side>(cg, moves);
|
|
|
- generateKnightMoves<side>(cg, moves);
|
|
|
- generateQueenMoves<side>(cg, moves);
|
|
|
- generateBishopMoves<side>(cg, moves);
|
|
|
- generateRookMoves<side>(cg, moves);
|
|
|
- generateKingMoves<side>(cg, moves);
|
|
|
+ generatePawnPromotions<side, false>(cg, moves);
|
|
|
+ generateKnightMoves<side, false>(cg, moves);
|
|
|
+ generateQueenMoves<side, false>(cg, moves);
|
|
|
+ generateBishopMoves<side, false>(cg, moves);
|
|
|
+ generateRookMoves<side, false>(cg, moves);
|
|
|
+ generateKingMoves<side, false>(cg, moves);
|
|
|
generateCastling<side>(cg, moves);
|
|
|
generateEnPassant<side>(cg, moves);
|
|
|
}
|
|
@@ -444,8 +444,11 @@ namespace chessy
|
|
|
template class CastlingGenerator<WHITE_SIDE>;
|
|
|
template class CastlingGenerator<BLACK_SIDE>;
|
|
|
|
|
|
- template void generateAllMoves<WHITE_SIDE>(const ChessGame&, std::vector<Move>&);
|
|
|
- template void generateAllMoves<BLACK_SIDE>(const ChessGame&, std::vector<Move>&);
|
|
|
+ template void generateAllMoves<WHITE_SIDE, false>(const ChessGame&, std::vector<Move>&);
|
|
|
+ template void generateAllMoves<BLACK_SIDE, false>(const ChessGame&, std::vector<Move>&);
|
|
|
+
|
|
|
+ template void generateAllMoves<WHITE_SIDE, true>(const ChessGame&, std::vector<Move>&);
|
|
|
+ template void generateAllMoves<BLACK_SIDE, true>(const ChessGame&, std::vector<Move>&);
|
|
|
|
|
|
template void orderMoves<WHITE_SIDE>(const ChessGame&, std::vector<Move>&);
|
|
|
template void orderMoves<BLACK_SIDE>(const ChessGame&, std::vector<Move>&);
|