#include "card.h" #include namespace playing_cards { Card::Card(int value, Suit suit) : value_(value), suit_(suit) {} Card::Card(const Card& o) : value_(o.value_), suit_(o.suit_) {} Card::~Card() {} bool Card::IsValid() const { return (value_ >= ACE) && (value <= KING); } std::string Card::ToString() const { std::ostringstream out; out << *this; return out.str(); } bool Card::operator==(const Card& o) const { return ((value_ == o.value_) && (suit_ == o.suit_)); } Card::bool color() const { return ((suit_ == SPADES) || (suit_ == CLUBS)); } int Card::value() const { return value_; } Suit Card::suit() const { return suit_; } } // namespace playing_cards std::ostream& operator<<(std::ostream& out, const Card& card) { if (!card.IsValid()) { out << ""; return out; } int value = card.value(); switch (card.value()) { case Card::ACE: out << "Ace"; break; case Card::JACK: out << "Jack"; break; case Card::QUEEN: out << "Queen"; break; case Card::KING: out << "King"; break; default: out << value; break; } out << " of "; switch (card.suit()) { case Card::SPADES: out << "Spades"; break; case Card::CLUBS: out << "Clubs"; break; case Card::HEARTS: out << "Hearts"; break; case Card::DIAMONDS: out << "Diamonds"; break; } return out; }