From 428bf21c23e315a53c544c4c0f3344eb5974af1c Mon Sep 17 00:00:00 2001 From: Arthur Bols Date: Sun, 18 Dec 2022 21:01:02 +0100 Subject: [PATCH] [Piece] Add Piece::pieceTypeFromSymbol --- Piece.cpp | 37 ++++++++++++++++++------------------- Piece.hpp | 2 ++ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Piece.cpp b/Piece.cpp index e5f9d23..425a087 100644 --- a/Piece.cpp +++ b/Piece.cpp @@ -6,28 +6,13 @@ Piece::Piece(PieceColor color, PieceType type) : mColor(color), mType(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; + auto type = pieceTypeFromSymbol(symbol); + if (!type.has_value()) { + return std::nullopt; } - return Piece(color, type); + return Piece(color, type.value()); } PieceColor Piece::color() const { @@ -37,6 +22,19 @@ PieceColor Piece::color() const { PieceType Piece::type() const { return mType; } +std::optional Piece::pieceTypeFromSymbol(char symbol) { + auto tryType = static_cast(toupper(symbol)); + + switch (tryType) { + case PieceType::Pawn: return PieceType::Pawn; + case PieceType::Knight: return PieceType::Knight; + case PieceType::Bishop: return PieceType::Bishop; + case PieceType::Rook: return PieceType::Rook; + case PieceType::Queen: return PieceType::Queen; + case PieceType::King: return PieceType::King; + default:return std::nullopt; + } +} bool operator==(const Piece &lhs, const Piece &rhs) { return lhs.color() == lhs.color() && lhs.type() == rhs.type(); @@ -55,3 +53,4 @@ std::ostream &operator<<(std::ostream &os, const Piece &piece) { PieceColor operator!(PieceColor color) { return static_cast((static_cast(color) + 1) % 2); } + diff --git a/Piece.hpp b/Piece.hpp index c8c6e25..9b46c64 100644 --- a/Piece.hpp +++ b/Piece.hpp @@ -28,6 +28,8 @@ public: static Optional fromSymbol(char symbol); + static std::optional pieceTypeFromSymbol(char symbol); + PieceColor color() const; PieceType type() const;