PiecePlacementError¶
-
enum class chesscxx::PiecePlacementError : uint8_t¶
Represents errors that can occur during PiecePlacement creation.
Values:
-
enumerator kMissingKing¶
One side is missing its king.
-
enumerator kMultipleKingsOfSameColor¶
A side has more than one king.
-
enumerator kPawnOnBackRank¶
A pawn is placed on the back rank.
-
enumerator kPawnOnPromotionRank¶
A pawn is placed on the promotion rank without being promoted.
-
enumerator kMissingKing¶
Helper classes¶
-
template<>
struct formatter : public chesscxx::internal::NoSpec - #include <piece_placement_error_formatter.h>
formatting support for chesscxx::PiecePlacementError
Examples¶
#include <chesscxx/parse.h>
#include <chesscxx/piece.h>
#include <chesscxx/piece_placement.h>
#include <chesscxx/piece_placement_error.h>
#include <chesscxx/square.h>
#include <cstdlib>
#include <optional>
#include <print>
#include <string_view>
namespace {
auto parseSquare(std::string_view str) {
auto parsed_square = chesscxx::parse<chesscxx::Square>(str);
if (!parsed_square) std::abort();
return parsed_square.value();
}
auto parsePiece(std::string_view str) {
auto parsed_piece = chesscxx::parse<chesscxx::Piece>(str);
if (!parsed_piece) std::abort();
return parsed_piece.value();
}
void setPiece(auto& array, const auto& square, const auto& piece) {
array.at(chesscxx::index(square)) = piece;
}
void clearSquare(auto& array, const auto& square) {
array.at(chesscxx::index(square)) = std::nullopt;
}
void printErrorOrValue(const auto& piece_placement) {
if (piece_placement) {
std::println("{}", piece_placement.value());
} else {
std::println("{}", piece_placement.error());
}
}
void createPiecePlacementAndPrint(const auto& piece_array) {
auto piece_placement = chesscxx::PiecePlacement::fromPieceArray(piece_array);
printErrorOrValue(piece_placement);
}
} // namespace
auto main() -> int {
std::println("{}", chesscxx::PiecePlacementError::kMissingKing);
std::println("{}\n", chesscxx::PiecePlacementError::kPawnOnBackRank);
chesscxx::PiecePlacement::PieceArray array;
createPiecePlacementAndPrint(array);
setPiece(array, parseSquare("a8"), parsePiece("K")); // white king
setPiece(array, parseSquare("a7"), parsePiece("K")); // white king
setPiece(array, parseSquare("h1"), parsePiece("k")); // black king
createPiecePlacementAndPrint(array);
clearSquare(array, parseSquare("a7"));
createPiecePlacementAndPrint(array);
setPiece(array, parseSquare("h8"), parsePiece("P")); // white pawn
createPiecePlacementAndPrint(array);
setPiece(array, parseSquare("h8"), parsePiece("p")); // black pawn
createPiecePlacementAndPrint(array);
}
Output:
Missing king
Pawn on back rank
Missing king
Multiple kings of same color
K7/8/8/8/8/8/8/7k
Pawn on promotion rank
Pawn on back rank