diff options
Diffstat (limited to 'include/chilbert/SmallBitVec.hpp')
-rw-r--r-- | include/chilbert/SmallBitVec.hpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/include/chilbert/SmallBitVec.hpp b/include/chilbert/SmallBitVec.hpp index 485ca9e..bd54855 100644 --- a/include/chilbert/SmallBitVec.hpp +++ b/include/chilbert/SmallBitVec.hpp @@ -247,44 +247,45 @@ public: size_t num_racks() const { return 1; } template<class BitVec> - class iterator_base : public Mask + class iterator_base { public: iterator_base& operator++() { - Mask::operator++(); + ++m_mask; return *this; } iterator_base& operator--() { - Mask::operator--(); + --m_mask; return *this; } bool operator==(const iterator_base& rhs) const { - return m_vec == rhs.m_vec && Mask::operator==(rhs); + return m_vec == rhs.m_vec && m_mask == rhs.m_mask; } bool operator!=(const iterator_base& rhs) const { return !operator==(rhs); } - bool operator*() const { return m_vec->test(*this); } + bool operator*() const { return m_vec->test(m_mask); } protected: iterator_base(BitVec& vec, const size_t index) - : Mask{index} - , m_vec{&vec} + : m_vec{&vec} + , m_mask{index} {} BitVec* m_vec; + Mask m_mask; }; class iterator : public iterator_base<SmallBitVec> { public: - void set() { m_vec->set(*this); } - void reset() { m_vec->reset(*this); } + void set() { m_vec->set(m_mask); } + void reset() { m_vec->reset(m_mask); } private: friend class SmallBitVec; |