#ifndef CHESS_ENGINE_BOARD_HPP #define CHESS_ENGINE_BOARD_HPP #include "Piece.hpp" #include "Square.hpp" #include "Move.hpp" #include "CastlingRights.hpp" #include #include #include class Board { public: using Optional = std::optional; using MoveVec = std::vector; Board(); void setPiece(const Square& square, const Piece::Optional& piece); Piece::Optional piece(const Square& square) const; void setTurn(PieceColor turn); PieceColor turn() const; void setCastlingRights(CastlingRights cr); CastlingRights castlingRights() const; void setEnPassantSquare(const Square::Optional& square); Square::Optional enPassantSquare() const; void makeMove(const Move& move); void pseudoLegalMoves(MoveVec& moves) const; void pseudoLegalMovesFrom(const Square& from, MoveVec& moves) const; }; std::ostream& operator<<(std::ostream& os, const Board& board); #endif