34 lines
703 B
C++
34 lines
703 B
C++
#ifndef CHESS_ENGINE_MOVE_HPP
|
|
#define CHESS_ENGINE_MOVE_HPP
|
|
|
|
#include "Square.hpp"
|
|
#include "Piece.hpp"
|
|
|
|
#include <iosfwd>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
class Move {
|
|
public:
|
|
|
|
using Optional = std::optional<Move>;
|
|
|
|
Move(const Square &from, const Square &to,
|
|
const std::optional<PieceType> &promotion = std::nullopt);
|
|
|
|
static Optional fromUci(const std::string &uci);
|
|
|
|
Square from() const;
|
|
Square to() const;
|
|
std::optional<PieceType> 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
|