ribi::Chess::Castling ribi::Chess::StrToCastling(const std::string& s) { assert(CanStrToCastling(s)); if (s.substr(0,3) == "O-O" || s.substr(0,3) == "0-0" ) return Castling::kingside; if (s.substr(0,5) == "O-O-O" || s.substr(0,5) == "0-0-0") return Castling::queenside; #ifndef NDEBUG TRACE(s); #endif assert(!"Cannot convert std::string to Castling"); throw std::logic_error("Cannot convert std::string to Castling"); }
bool ribi::Chess::Move::ParseIsCastling(const std::string& s) { return CanStrToCastling(s); //return s == "0-0" || s == "O-O" || s == "O-O+" || s == "0-0-0" || s == "O-O-O"|| s == "O-O-O+"; }
bool ribi::Chess::Move::IsCastling() const { assert(!m_is_castling || CanStrToCastling(m_str)); return m_is_castling; }