#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; private: Square mFrom; Square mTo; std::optional mPromotion; }; 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