#include "Move.hpp" #include Move::Move(const Square &from, const Square &to, const std::optional &promotion) : mFrom(from), mTo(to), mPromotion(promotion) { } Move::Optional Move::fromUci(const std::string &uci) { if (uci.length() < 4 || uci.length() > 5) return std::nullopt; std::optional promotion = std::nullopt; if (uci.length() == 5) { promotion = Piece::pieceTypeFromSymbol(uci[4]); if (!promotion.has_value()) { return std::nullopt; } } auto from = Square::fromName(uci.substr(0, 2)); auto to = Square::fromName(uci.substr(2, 2)); if (!from.has_value() || !to.has_value()) return std::nullopt; return Move(from.value(), to.value(), promotion); } Square Move::from() const { return mFrom; } Square Move::to() const { return mTo; } std::optional Move::promotion() const { return mPromotion; } std::ostream &operator<<(std::ostream &os, const Move &move) { (void) move; return os; } bool operator<(const Move &lhs, const Move &rhs) { (void) lhs; (void) rhs; return false; } bool operator==(const Move &lhs, const Move &rhs) { return lhs.from() == rhs.from() && lhs.to() == rhs.to() && lhs.promotion() == rhs.promotion(); }