#ifndef CHESS_ENGINE_MOVE_HPP #define CHESS_ENGINE_MOVE_HPP #include "Square.hpp" #include "Piece.hpp" #include #include #include class Move { public: using Optional = std::optional; Move(const Square& from, const Square& to, const std::optional& promotion = std::nullopt); static Optional fromUci(const std::string& uci); Square from() const; Square to() const; std::optional promotion() const; }; std::ostream& operator<<(std::ostream& os, const Move& move); // Needed for std::map, std::set bool operator<(const Move& lhs, const Move& rhs); bool operator==(const Move& lhs, const Move& rhs); #endif