#ifndef CHESS_ENGINE_MOVE_HPP #define CHESS_ENGINE_MOVE_HPP #include "Square.hpp" #include "Piece.hpp" #include #include #include #include class Move { public: using Optional = std::optional; explicit Move(const Square &from, const Square &to); explicit Move(const Square &from, const Square &to, const std::optional &promotion, unsigned score = 0); explicit Move(const Square &from, const Square &to, unsigned score); static Optional fromUci(const std::string &uci); Square from() const; Square to() const; std::optional promotion() const; friend bool operator<(const Move &lhs, const Move &rhs); friend bool operator==(const Move &lhs, const Move &rhs); private: Square mFrom; Square mTo; std::optional mPromotion = std::nullopt; unsigned mScore = std::numeric_limits::max(); public: unsigned int score() const; void setScore(unsigned int mScore); }; std::ostream &operator<<(std::ostream &os, const Move &move); // Needed for std::map, std::set #endif