// Overload operator << for moves to make it easier to print moves in
// coordinate notation compatible with UCI protocol.
+ std::ostream& operator<<(std::ostream& os, Move m) {
- std::ostream& operator<<(std::ostream& os, Move m);
+ bool chess960 = (os.iword(0) != 0); // See set960()
+ return os << move_to_uci(m, chess960);
+ }
/// Adjustments
int64_t sum = 0;
// Generate all legal moves
- MoveStack* last = generate_moves(pos, mlist);
+ MoveStack* last = generate<MV_LEGAL>(pos, mlist);
// If we are at the last ply we don't need to do and undo
// the moves, just to count them.
int t = current_search_time();
// Poll for input
- if (data_available())
+ if (input_available())
{
// We are line oriented, don't read single chars
std::string command;
ss[0].eval = ss[0].evalMargin = VALUE_NONE;
// Generate all legal moves
- MoveStack* last = generate_moves(pos, mlist);
+ MoveStack* last = generate<MV_LEGAL>(pos, mlist);
// Add each move to the RootMoveList's vector
for (MoveStack* cur = mlist; cur != last; cur++)
}
}
- // Overload operator << to make it easier to print moves in coordinate notation
- // (g1f3, a7a8q, etc.). The only special case is castling moves, where we
- // print in the e1g1 notation in normal chess mode, and in e1h1 notation in
- // Chess960 mode.
-
- std::ostream& operator<<(std::ostream& os, Move m) {
-
- Square from = move_from(m);
- Square to = move_to(m);
- bool chess960 = (os.iword(0) != 0); // See set960()
-
- if (m == MOVE_NONE)
- return os << "(none)";
-
- if (m == MOVE_NULL)
- return os << "0000";
-
- if (move_is_short_castle(m) && !chess960)
- return os << (from == SQ_E1 ? "e1g1" : "e8g8");
-
- if (move_is_long_castle(m) && !chess960)
- return os << (from == SQ_E1 ? "e1c1" : "e8c8");
-
- os << square_to_string(from) << square_to_string(to);
-
- if (move_is_promotion(m))
- os << char(tolower(piece_type_to_char(move_promotion_piece(m))));
-
- return os;
- }
-
} // namespace