Class std::bitset with additional safety/checking/debug instrumentation.
43 :
public _GLIBCXX_STD_C::bitset<_Nb>
44 #if __cplusplus < 201103L
48 typedef _GLIBCXX_STD_C::bitset<_Nb> _Base;
54 #if __cplusplus >= 201103L
55 typedef typename _Base::reference reference;
59 :
private _Base::reference
62 typedef typename _Base::reference _Base_ref;
67 reference(
const _Base_ref&
__base,
70 , _Safe_iterator_base(__seq,
false)
74 reference(
const reference& __x) _GLIBCXX_NOEXCEPT
76 , _Safe_iterator_base(__x,
false)
80 operator=(
bool __x) _GLIBCXX_NOEXCEPT
85 *
static_cast<_Base_ref*
>(
this) = __x;
90 operator=(
const reference& __x) _GLIBCXX_NOEXCEPT
98 *
static_cast<_Base_ref*
>(
this) = __x;
103 operator~() const _GLIBCXX_NOEXCEPT
107 ._M_iterator(*
this));
108 return ~(*
static_cast<const _Base_ref*
>(
this));
111 operator bool() const _GLIBCXX_NOEXCEPT
115 ._M_iterator(*
this));
116 return *
static_cast<const _Base_ref*
>(
this);
120 flip() _GLIBCXX_NOEXCEPT
124 ._M_iterator(*
this));
132 _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
135 #if __cplusplus >= 201103L
136 constexpr bitset(
unsigned long long __val) noexcept
138 bitset(
unsigned long __val)
142 template<
typename _CharT,
typename _Traits,
typename _Alloc>
144 bitset(
const std::basic_string<_CharT, _Traits, _Alloc>& __str,
145 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
147 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
148 __n = (std::basic_string<_CharT, _Traits, _Alloc>::npos))
149 : _Base(__str, __pos, __n) { }
153 template<
class _CharT,
class _Traits,
class _Alloc>
154 bitset(
const std::basic_string<_CharT, _Traits, _Alloc>& __str,
155 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
157 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
159 _CharT __zero, _CharT __one = _CharT(
'1'))
160 : _Base(__str, __pos, __n, __zero, __one) { }
162 bitset(
const _Base& __x) : _Base(__x) { }
164 #if __cplusplus >= 201103L
165 template<
typename _CharT>
167 bitset(
const _CharT* __str,
168 typename std::basic_string<_CharT>::size_type __n
169 = std::basic_string<_CharT>::npos,
170 _CharT __zero = _CharT(
'0'), _CharT __one = _CharT(
'1'))
171 : _Base(__str, __n, __zero, __one) { }
176 operator&=(
const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
183 operator|=(
const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
190 operator^=(
const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
197 operator<<=(
size_t __pos) _GLIBCXX_NOEXCEPT
204 operator>>=(
size_t __pos) _GLIBCXX_NOEXCEPT
211 set() _GLIBCXX_NOEXCEPT
220 set(
size_t __pos,
bool __val =
true)
222 _Base::set(__pos, __val);
227 reset() _GLIBCXX_NOEXCEPT
241 operator~() const _GLIBCXX_NOEXCEPT
242 {
return bitset(~_M_base()); }
245 flip() _GLIBCXX_NOEXCEPT
262 operator[](
size_t __pos)
265 #if __cplusplus >= 201103L
266 return _M_base()[__pos];
268 return reference(_M_base()[__pos],
this);
274 _GLIBCXX_CONSTEXPR
bool
275 operator[](
size_t __pos)
const
277 #if __cplusplus < 201103L
281 return _Base::operator[](__pos);
284 using _Base::to_ulong;
285 #if __cplusplus >= 201103L
286 using _Base::to_ullong;
289 template <
typename _CharT,
typename _Traits,
typename _Alloc>
290 std::basic_string<_CharT, _Traits, _Alloc>
292 {
return _M_base().template to_string<_CharT, _Traits, _Alloc>(); }
296 template<
class _CharT,
class _Traits,
class _Alloc>
297 std::basic_string<_CharT, _Traits, _Alloc>
298 to_string(_CharT __zero, _CharT __one = _CharT(
'1'))
const
300 return _M_base().template
301 to_string<_CharT, _Traits, _Alloc>(__zero, __one);
306 template<
typename _CharT,
typename _Traits>
307 std::basic_string<_CharT, _Traits, std::allocator<_CharT> >
309 {
return to_string<_CharT, _Traits, std::allocator<_CharT> >(); }
313 template<
class _CharT,
class _Traits>
314 std::basic_string<_CharT, _Traits, std::allocator<_CharT> >
315 to_string(_CharT __zero, _CharT __one = _CharT(
'1'))
const
316 {
return to_string<_CharT, _Traits,
317 std::allocator<_CharT> >(__zero, __one); }
319 template<
typename _CharT>
320 std::basic_string<_CharT, std::char_traits<_CharT>,
321 std::allocator<_CharT> >
324 return to_string<_CharT, std::char_traits<_CharT>,
325 std::allocator<_CharT> >();
328 template<
class _CharT>
329 std::basic_string<_CharT, std::char_traits<_CharT>,
330 std::allocator<_CharT> >
331 to_string(_CharT __zero, _CharT __one = _CharT(
'1'))
const
333 return to_string<_CharT, std::char_traits<_CharT>,
334 std::allocator<_CharT> >(__zero, __one);
337 std::basic_string<char, std::char_traits<char>, std::allocator<char> >
340 return to_string<char,std::char_traits<char>,std::allocator<char> >();
343 std::basic_string<char, std::char_traits<char>, std::allocator<char> >
344 to_string(
char __zero,
char __one =
'1')
const
346 return to_string<char, std::char_traits<char>,
347 std::allocator<char> >(__zero, __one);
354 operator==(
const bitset<_Nb>& __rhs)
const _GLIBCXX_NOEXCEPT
355 {
return _M_base() == __rhs; }
358 operator!=(
const bitset<_Nb>& __rhs)
const _GLIBCXX_NOEXCEPT
359 {
return _M_base() != __rhs; }
367 operator<<(
size_t __pos)
const _GLIBCXX_NOEXCEPT
368 {
return bitset<_Nb>(_M_base() << __pos); }
371 operator>>(
size_t __pos)
const _GLIBCXX_NOEXCEPT
372 {
return bitset<_Nb>(_M_base() >> __pos); }
375 _M_base() _GLIBCXX_NOEXCEPT
379 _M_base() const _GLIBCXX_NOEXCEPT
385 operator&(
const bitset<_Nb>& __x,
const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
386 {
return bitset<_Nb>(__x) &= __y; }
390 operator|(
const bitset<_Nb>& __x,
const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
391 {
return bitset<_Nb>(__x) |= __y; }
395 operator^(
const bitset<_Nb>& __x,
const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
396 {
return bitset<_Nb>(__x) ^= __y; }
398 template<
typename _CharT,
typename _Traits,
size_t _Nb>
399 std::basic_istream<_CharT, _Traits>&
400 operator>>(std::basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x)
401 {
return __is >> __x._M_base(); }
403 template<
typename _CharT,
typename _Traits,
size_t _Nb>
404 std::basic_ostream<_CharT, _Traits>&
405 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
406 const bitset<_Nb>& __x)
407 {
return __os << __x._M_base(); }
411 #if __cplusplus >= 201103L
415 struct hash<__debug::bitset<_Nb>>
416 :
public __hash_base<size_t, __debug::bitset<_Nb>>
419 operator()(
const __debug::bitset<_Nb>& __b)
const noexcept
420 {
return std::hash<_GLIBCXX_STD_C::bitset<_Nb>>()(__b._M_base()); }
Definition: formatter.h:71
_Siter_base< _Iterator >::iterator_type __base(_Iterator __it)
Definition: functions.h:446
bool operator==(const exception_ptr &, const exception_ptr &) _GLIBCXX_USE_NOEXCEPT __attribute__((__pure__))
#define false
Definition: stdbool.h:35
double __v4df __attribute__((__vector_size__(32)))
Definition: avxintrin.h:32
#define bool
Definition: stdbool.h:33
#define __glibcxx_check_subscript(_N)
Definition: macros.h:202
std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, basic_string< _CharT, _Traits, _Allocator > &__str)
Definition: string:1122
Definition: formatter.h:73
std::basic_ostream< _CharT, _Traits > & operator<<(std::basic_ostream< _CharT, _Traits > &__os, const basic_string< _CharT, _Traits, _Allocator > &__str)
Definition: string:1116
bool operator!=(const exception_ptr &, const exception_ptr &) _GLIBCXX_USE_NOEXCEPT __attribute__((__pure__))
Definition: formatter.h:72
Basic functionality for a safe iterator.
Definition: safe_base.h:50
Base class that supports tracking of iterators that reference a sequence.
Definition: safe_base.h:177
#define _GLIBCXX_DEBUG_VERIFY(_Condition, _ErrorMessage)
Definition: macros.h:49