#ifndef CHESS_ENGINE_PIECE_HPP #define CHESS_ENGINE_PIECE_HPP #include #include enum class PieceColor { White = 0, Black = 1, }; enum class PieceType { Pawn = 'P', Knight = 'N', Bishop = 'B', Rook = 'R', Queen = 'Q', King = 'K' }; class Piece { const PieceColor _color; const PieceType _type; public: using Optional = std::optional; Piece(PieceColor color, PieceType type); static Optional fromSymbol(char symbol); PieceColor color() const; PieceType type() const; }; bool operator==(const Piece& lhs, const Piece& rhs); std::ostream& operator<<(std::ostream& os, const Piece& piece); // Invert a color (White becomes Black and vice versa) PieceColor operator!(PieceColor color); #endif