4#include <initializer_list>
22 friend std::hash<CardSet>;
30 constexpr iterator(std::bitset<CardUtils::CARD_COUNT>
const& set_ref)
31 : m_set_ref(set_ref) {
40 constexpr iterator(std::bitset<CardUtils::CARD_COUNT>
const& set_ref, std::size_t index)
41 : m_set_ref(set_ref), m_index(index) {
48 while (m_index < m_set_ref.size() && !m_set_ref[m_index])
63 constexpr bool operator==(
iterator const& other)
const {
return &m_set_ref == &other.m_set_ref && m_index == other.m_index; }
75 std::bitset<CardUtils::CARD_COUNT>
const& m_set_ref;
76 std::size_t m_index { 0 };
85 constexpr CardSet(std::initializer_list<Card> cards) {
86 for (
auto card : cards)
87 m_set[
static_cast<std::size_t
>(card)] =
true;
88 m_size = cards.size();
94 constexpr CardSet(std::bitset<CardUtils::CARD_COUNT> set)
95 : m_set(set), m_size(set.count()) {}
100 constexpr std::size_t
size()
const {
return m_size; }
104 constexpr bool empty()
const {
return m_size == 0; }
110 constexpr bool contains(
Card card)
const {
return m_set[
static_cast<std::size_t
>(card)]; }
121 m_set[
static_cast<std::size_t
>(card)] =
true;
133 m_set[
static_cast<std::size_t
>(card)] =
false;
163 m_set |= other.m_set;
164 m_size = m_set.count();
181 constexpr bool is_subset(
CardSet const& other)
const {
return (m_set & other.m_set) == m_set; }
187 constexpr iterator end()
const {
return { m_set, m_set.size() }; }
190 std::bitset<CardUtils::CARD_COUNT> m_set;
191 std::size_t m_size { 0 };
198struct std::hash<Cluedo::CardSet> {
201 return std::hash<std::bitset<Cluedo::CardUtils::CARD_COUNT>>()(set.m_set);
Card
All the cards in Cluedo.
Definition Card.hpp:66
An iterator for the CardSet class.
Definition CardSet.hpp:25
constexpr void advance_to_next_index()
Definition CardSet.hpp:47
constexpr void operator++()
Advances the iterator to the next card in the set.
Definition CardSet.hpp:53
constexpr bool operator!=(iterator const &other) const
Definition CardSet.hpp:69
constexpr bool operator==(iterator const &other) const
Definition CardSet.hpp:63
constexpr iterator(std::bitset< CardUtils::CARD_COUNT > const &set_ref)
Definition CardSet.hpp:30
constexpr iterator(std::bitset< CardUtils::CARD_COUNT > const &set_ref, std::size_t index)
Definition CardSet.hpp:40
constexpr Card operator*() const
Returns the card that the iterator points to.
Definition CardSet.hpp:72
A set of cards.
Definition CardSet.hpp:20
constexpr bool operator==(CardSet const &other) const =default
static constexpr CardSet intersection(CardSet const &a, CardSet const &b)
Definition CardSet.hpp:174
constexpr CardSet & set_union(CardSet const &other)
Definition CardSet.hpp:162
constexpr void erase(Card card)
Definition CardSet.hpp:129
constexpr bool contains(Card card) const
Definition CardSet.hpp:110
constexpr CardSet(std::initializer_list< Card > cards)
Definition CardSet.hpp:85
constexpr iterator end() const
Returns an iterator to the last card of the set.
Definition CardSet.hpp:187
constexpr void clear()
Clears the set.
Definition CardSet.hpp:138
constexpr std::size_t size() const
Definition CardSet.hpp:100
constexpr iterator begin() const
Returns an iterator to the first card of the set.
Definition CardSet.hpp:184
constexpr CardSet()=default
Constructs an empty set.
constexpr bool is_subset(CardSet const &other) const
Definition CardSet.hpp:181
constexpr bool operator!=(CardSet const &other) const =default
constexpr bool empty() const
Definition CardSet.hpp:104
constexpr bool insert(Card card)
Definition CardSet.hpp:117
constexpr CardSet(std::bitset< CardUtils::CARD_COUNT > set)
Definition CardSet.hpp:94
std::size_t operator()(Cluedo::CardSet const &set) const noexcept
Computesthe hash of a CardSet object using the hash of the underlying std::bitset.
Definition CardSet.hpp:200