-
- int generate_white_pawn_captures(const Position &pos, MoveStack *mlist);
- int generate_black_pawn_captures(const Position &pos, MoveStack *mlist);
- int generate_white_pawn_noncaptures(const Position &pos, MoveStack *mlist);
- int generate_black_pawn_noncaptures(const Position &pos, MoveStack *mlist);
- int generate_knight_moves(const Position &pos, MoveStack *mlist,
- Color side, Bitboard target);
- int generate_bishop_moves(const Position &pos, MoveStack *mlist,
- Color side, Bitboard target);
- int generate_rook_moves(const Position &pos, MoveStack *mlist,
- Color side, Bitboard target);
- int generate_queen_moves(const Position &pos, MoveStack *mlist,
- Color side, Bitboard target);
- int generate_king_moves(const Position &pos, MoveStack *mlist,
- Square from, Bitboard target);
- int generate_castle_moves(const Position &pos, MoveStack *mlist, Color us);
-
-}
-
-
-////
-//// Functions
-////
-
-
-/// generate_captures generates() all pseudo-legal captures and queen
-/// promotions. The return value is the number of moves generated.
-
-int generate_captures(const Position &pos, MoveStack *mlist) {
- Color us = pos.side_to_move();
- Bitboard target = pos.pieces_of_color(opposite_color(us));
- int n = 0;
-
- assert(pos.is_ok());
- assert(!pos.is_check());
-
- if(us == WHITE)
- n += generate_white_pawn_captures(pos, mlist);
- else
- n += generate_black_pawn_captures(pos, mlist);
- n += generate_knight_moves(pos, mlist+n, us, target);
- n += generate_bishop_moves(pos, mlist+n, us, target);
- n += generate_rook_moves(pos, mlist+n, us, target);
- n += generate_queen_moves(pos, mlist+n, us, target);
- n += generate_king_moves(pos, mlist+n, pos.king_square(us), target);
-
- return n;
-}
-
-
-/// generate_noncaptures() generates all pseudo-legal non-captures and
-/// underpromotions. The return value is the number of moves generated.
-
-int generate_noncaptures(const Position &pos, MoveStack *mlist) {
- Color us = pos.side_to_move();
- Bitboard target = pos.empty_squares();
- int n = 0;
-
- assert(pos.is_ok());
- assert(!pos.is_check());
-
- if(us == WHITE)
- n += generate_white_pawn_noncaptures(pos, mlist);
- else
- n += generate_black_pawn_noncaptures(pos, mlist);
- n += generate_knight_moves(pos, mlist+n, us, target);
- n += generate_bishop_moves(pos, mlist+n, us, target);
- n += generate_rook_moves(pos, mlist+n, us, target);
- n += generate_queen_moves(pos, mlist+n, us, target);
- n += generate_king_moves(pos, mlist+n, pos.king_square(us), target);
- n += generate_castle_moves(pos, mlist+n, us);
-
- return n;
-}
-
-
-/// generate_checks() generates all pseudo-legal non-capturing, non-promoting
-/// checks, except castling moves (will add this later). It returns the
-/// number of generated moves.
-
-int generate_checks(const Position &pos, MoveStack *mlist, Bitboard dc) {
- Color us, them;
- Square ksq, from, to;
- Bitboard empty, checkSqs, b1, b2, b3;
- int n = 0;
-
- assert(pos.is_ok());
- assert(!pos.is_check());