X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmovegen.cpp;h=bc56548da09f75fd27d4a9c8167f5de83bae100d;hb=67375f4693c97fb1321864bb4d143812cd824f9b;hp=0fc684363985a086ccd63697b9797d106c069dd3;hpb=33c608e140b7fd7ced99086488e82a9bbe22e8e3;p=stockfish diff --git a/src/movegen.cpp b/src/movegen.cpp index 0fc68436..bc56548d 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -40,8 +40,10 @@ namespace { QUEEN_SIDE }; - const bool CAPTURE = true; - const bool NON_CAPTURE = false; + enum MoveType { + CAPTURE, + NON_CAPTURE + }; // Functions bool castling_is_check(const Position&, CastlingSide); @@ -76,19 +78,19 @@ namespace { } - // Template generate_piece_moves() with specializations + // Template generate_piece_moves() with specializations and overloads template MoveStack* generate_piece_moves(const Position&, MoveStack*, Color us, Bitboard); template<> - MoveStack* generate_piece_moves(const Position& pos, MoveStack* mlist, Color us, Bitboard target); + MoveStack* generate_piece_moves(const Position&, MoveStack*, Color, Bitboard); - template + template inline MoveStack* generate_piece_moves(const Position& p, MoveStack* m, Color us) { assert(Piece == PAWN); - if (Capture) + if (Type == CAPTURE) return (us == WHITE ? generate_pawn_captures(p, m) : generate_pawn_captures(p, m)); else @@ -96,17 +98,16 @@ namespace { : generate_pawn_noncaptures(p, m)); } - // Template generate_piece_blocking_evasions() with specializations template - MoveStack* generate_piece_blocking_evasions(const Position&, MoveStack*, Color us, Bitboard, Bitboard); + MoveStack* generate_piece_moves(const Position&, MoveStack*, Color us, Bitboard, Bitboard); template<> - inline MoveStack* generate_piece_blocking_evasions(const Position& p, MoveStack* m, Color us, - Bitboard pnd, Bitboard bs) { + inline MoveStack* generate_piece_moves(const Position& p, MoveStack* m, + Color us, Bitboard t, Bitboard pnd) { if (us == WHITE) - return generate_pawn_blocking_evasions(p, pnd, bs, m); + return generate_pawn_blocking_evasions(p, pnd, t, m); else - return generate_pawn_blocking_evasions(p, pnd, bs, m); + return generate_pawn_blocking_evasions(p, pnd, t, m); } } @@ -298,12 +299,11 @@ int generate_evasions(const Position& pos, MoveStack* mlist, Bitboard pinned) { if (blockSquares != EmptyBoardBB) { - // Pieces moves - mlist = generate_piece_blocking_evasions(pos, mlist, us, pinned, blockSquares); - mlist = generate_piece_blocking_evasions(pos, mlist, us, pinned, blockSquares); - mlist = generate_piece_blocking_evasions(pos, mlist, us, pinned, blockSquares); - mlist = generate_piece_blocking_evasions(pos, mlist, us, pinned, blockSquares); - mlist = generate_piece_blocking_evasions(pos, mlist, us, pinned, blockSquares); + mlist = generate_piece_moves(pos, mlist, us, blockSquares, pinned); + mlist = generate_piece_moves(pos, mlist, us, blockSquares, pinned); + mlist = generate_piece_moves(pos, mlist, us, blockSquares, pinned); + mlist = generate_piece_moves(pos, mlist, us, blockSquares, pinned); + mlist = generate_piece_moves(pos, mlist, us, blockSquares, pinned); } } @@ -562,20 +562,9 @@ namespace { return mlist; } - template<> - MoveStack* generate_piece_moves(const Position& pos, MoveStack* mlist, Color us, Bitboard target) { - - Bitboard b; - Square from = pos.king_square(us); - - b = pos.piece_attacks(from) & target; - SERIALIZE_MOVES(b); - return mlist; - } - template - MoveStack* generate_piece_blocking_evasions(const Position& pos, MoveStack* mlist, Color us, - Bitboard pinned, Bitboard blockSquares) { + MoveStack* generate_piece_moves(const Position& pos, MoveStack* mlist, + Color us, Bitboard target, Bitboard pinned) { Square from; Bitboard b; @@ -585,12 +574,23 @@ namespace { if (pinned && bit_is_set(pinned, from)) continue; - b = pos.piece_attacks(from) & blockSquares; + b = pos.piece_attacks(from) & target; SERIALIZE_MOVES(b); } return mlist; } + template<> + MoveStack* generate_piece_moves(const Position& pos, MoveStack* mlist, Color us, Bitboard target) { + + Bitboard b; + Square from = pos.king_square(us); + + b = pos.piece_attacks(from) & target; + SERIALIZE_MOVES(b); + return mlist; + } + template