#pragma once #include template class Bitset { public: Bitset() : m_value() { } Bitset(T value) : m_value(value) { } Bitset(const Bitset& other) : m_value(other.m_value) { } Bitset& operator=(T value) { m_value = value; return *this; } Bitset& operator=(const Bitset& other) { if (&other == this) return *this; m_value = other.m_value; return *this; } T value() const { return m_value; } void set(int index, bool b) { check((usize)index < (sizeof(T) * 8)); if (b) m_value |= (((T)1) << index); else m_value &= ~(((T)1) << index); } bool get(int index) { check((usize)index < (sizeof(T) * 8)); return m_value & (((T)1) << index); } void clear() { m_value = 0; } private: T m_value; };