#include "Piece.hpp" #include Piece::Piece(PieceColor color, PieceType type) : _color(color), _type(type) { } Piece::Optional Piece::fromSymbol(char symbol) { PieceType type; PieceColor color = std::isupper(symbol) ? PieceColor::White : PieceColor::Black; auto tryType = static_cast(toupper(symbol)); switch (tryType) { case PieceType::Pawn: type = PieceType::Pawn; break; case PieceType::Knight: type = PieceType::Knight; break; case PieceType::Bishop: type = PieceType::Bishop; break; case PieceType::Rook: type = PieceType::Rook; break; case PieceType::Queen: type = PieceType::Queen; break; case PieceType::King: type = PieceType::King; break; default: return std::nullopt; } return Piece(color, type); } PieceColor Piece::color() const { return _color; } PieceType Piece::type() const { return _type; } bool operator==(const Piece &lhs, const Piece &rhs) { return lhs.color() == lhs.color() && lhs.type() == rhs.type(); } std::ostream &operator<<(std::ostream &os, const Piece &piece) { (void) piece; return os; } PieceColor operator!(PieceColor color) { return static_cast((static_cast(color) + 1) % 2); }