10 using underlying_container = UnderlyingContainer;
11 using underlying_type = UnderlyingContainer::value_type;
12 using size_type = UnderlyingContainer::size_type;
15 static const size_t bits_per_value =
sizeof(underlying_type) * 8;
18 constexpr bool test(size_type pos)
const {
19 auto idx = pos / bits_per_value;
20 auto offset = pos % bits_per_value;
21 return ((container_[idx] >> offset) & underlying_type(1)) != 0;
24 constexpr Derived& set(size_type pos) {
return set(pos,
true); }
26 constexpr Derived& set(size_type pos,
bool value) {
27 auto idx = pos / bits_per_value;
28 auto offset = pos % bits_per_value;
30 container_[idx] |= (underlying_type(1) << offset);
32 container_[idx] &= ~(underlying_type(1) << offset);
34 return static_cast<Derived&
>(*this);
38 underlying_container container_;