1 #ifndef __CT_BITSET_CXX14_HPP_INCLUDED__
2 #define __CT_BITSET_CXX14_HPP_INCLUDED__
42 template<
class _Ty,
size_t _Size,
class u_type>
47 static constexpr
size_t width = 8 *
sizeof(_Ty);
63 constexpr
auto _min = I *
width;
69 for (
size_t j = 0; j <
width; ++j)
77 template <
size_t I,
typename _Other>
78 static constexpr _Ty
assemble_mask(
const std::initializer_list<_Other>& _init)
81 constexpr
auto _min = I *
width;
83 for (_Other _rec : _init)
85 size_t rec =
static_cast<size_t>(
static_cast<u_type
>(_rec));
86 if (_min <= rec && rec <= _max)
88 ret |= _Ty(1) << (rec %
width);
94 static constexpr
bool IsYes(
char c) {
return c ==
'1'; }
95 static constexpr
bool IsYes(
bool c) {
return c; }
97 template <
size_t I,
size_t N,
typename _Base>
102 constexpr
auto _min = I *
width;
104 for (
size_t pos = _min; pos < _max && pos <
N; ++pos)
111 template <
typename _Input, std::size_t... I>
114 return {assemble_mask<I>(_init)...};
117 template<
typename _Other>
125 return assemble_bitset(
range_t{
static_cast<size_t>(from),
static_cast<size_t>(to) }, std::make_index_sequence<_Size>{});
140 template<
size_t _Bits,
class T>
175 using std::pair<T, T>::pair;
187 static constexpr
size_t capacity() {
return _Bits; }
243 size_t _Pos =
static_cast<size_t>(_v);
248 bool previous = (
val &
mask) != 0;
256 size_t _Pos =
static_cast<size_t>(_v);
261 bool previous = (
val &
mask) != 0;
270 size_t _Pos =
static_cast<size_t>(_v);
275 bool previous = (
val &
mask) != 0;
304 while (m_index < m_bitset->
capacity())
341 constexpr const_iterator
begin()
const {
return const_iterator(
this, 0); }
342 constexpr const_iterator
end()
const {
return const_iterator(
this,
capacity()); }
343 constexpr const_iterator
cbegin()
const {
return const_iterator(
this, 0); }
344 constexpr const_iterator
cend()
const {
return const_iterator(
this,
capacity()); }
346 template<
class _Ty,
class _Alloc>
347 operator std::vector<_Ty, _Alloc>()
const
349 std::vector<_Ty, _Alloc> vec;
372 throw std::out_of_range(
"invalid const_bitset<_Bits, T> position");
constexpr T operator*() const
constexpr const_iterator(const const_bitset *_this, size_t index)
constexpr bool operator!=(const const_iterator &o) const
constexpr const_iterator operator++(int)
const const_bitset * m_bitset
constexpr T operator->() const
constexpr bool operator==(const const_iterator &o) const
constexpr const_iterator & operator++()
const eTestNames & reference
std::forward_iterator_tag iterator_category
constexpr const_iterator()=default
const eTestNames * pointer
constexpr const_bitset(T _init)
typename real_underlying_type< eTestNames >::type u_type
constexpr const_bitset(char const (&_init)[N])
static constexpr size_t _Bitsperword
constexpr const_bitset()=default
static constexpr size_t capacity()
constexpr bool test(T _Pos) const
constexpr const_iterator begin() const
static constexpr const_bitset set_range(T _from, T _to)
constexpr bool ct_set(T _v)
constexpr bool x_test(size_t _Pos) const
constexpr size_t size() const
constexpr bool _Subscript(size_t _Pos) const
static constexpr size_t _Words
constexpr bool empty() const
constexpr const_iterator cend() const
const_bitset & operator-=(T value)
constexpr const_iterator end() const
constexpr const_bitset(const _Array_t &args)
constexpr const_iterator cbegin() const
constexpr const_bitset(std::initializer_list< T > _init)
const_bitset & operator+=(T value)
constexpr const_bitset(const range &_range)
constexpr const_bitset(const const_array< char, N > &_init)
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
constexpr auto make_array(T &&a)
std::istream & in(std::istream &in_, double &x_)
unsigned __int64 uint64_t
static constexpr bool IsYes(bool c)
static constexpr array_t set_bits(const const_array< char, N > &in)
static constexpr array_t set_bits(std::initializer_list< _Other > args)
static constexpr array_t assemble_bitset(const _Input &_init, std::index_sequence< I... >)
static constexpr _Ty assemble_mask(const std::initializer_list< _Other > &_init)
static constexpr bool IsYes(char c)
static constexpr bool check_range(const range_t &range, size_t i)
static constexpr array_t set_bits(const const_array< bool, N > &in)
static constexpr size_t width
static constexpr _Ty assemble_mask(const const_array< _Base, N > &_init)
static constexpr array_t set_range(T from, T to)
static constexpr _Ty assemble_mask(const range_t &_init)
static constexpr size_t size() noexcept