00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef _GLIBCXX_BITSET
00049 #define _GLIBCXX_BITSET 1
00050
00051 #pragma GCC system_header
00052
00053 #include <cstddef>
00054 #include <cstring>
00055 #include <limits>
00056 #include <string>
00057 #include <bits/functexcept.h>
00058
00059 #include <ostream>
00060 #include <istream>
00061
00062 #define _GLIBCXX_BITSET_BITS_PER_WORD numeric_limits<unsigned long>::digits
00063 #define _GLIBCXX_BITSET_WORDS(__n) \
00064 ((__n) < 1 ? 0 : ((__n) + _GLIBCXX_BITSET_BITS_PER_WORD - 1)/_GLIBCXX_BITSET_BITS_PER_WORD)
00065
00066 namespace _GLIBCXX_STD
00067 {
00068
00069
00070
00071
00072
00073
00074
00075
00076 template<size_t _Nw>
00077 struct _Base_bitset
00078 {
00079 typedef unsigned long _WordT;
00080
00081
00082 _WordT _M_w[_Nw];
00083
00084 _Base_bitset() { _M_do_reset(); }
00085 _Base_bitset(unsigned long __val)
00086 {
00087 _M_do_reset();
00088 _M_w[0] = __val;
00089 }
00090
00091 static size_t
00092 _S_whichword(size_t __pos )
00093 { return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
00094
00095 static size_t
00096 _S_whichbyte(size_t __pos )
00097 { return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
00098
00099 static size_t
00100 _S_whichbit(size_t __pos )
00101 { return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
00102
00103 static _WordT
00104 _S_maskbit(size_t __pos )
00105 { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
00106
00107 _WordT&
00108 _M_getword(size_t __pos)
00109 { return _M_w[_S_whichword(__pos)]; }
00110
00111 _WordT
00112 _M_getword(size_t __pos) const
00113 { return _M_w[_S_whichword(__pos)]; }
00114
00115 _WordT&
00116 _M_hiword() { return _M_w[_Nw - 1]; }
00117
00118 _WordT
00119 _M_hiword() const { return _M_w[_Nw - 1]; }
00120
00121 void
00122 _M_do_and(const _Base_bitset<_Nw>& __x)
00123 {
00124 for (size_t __i = 0; __i < _Nw; __i++)
00125 _M_w[__i] &= __x._M_w[__i];
00126 }
00127
00128 void
00129 _M_do_or(const _Base_bitset<_Nw>& __x)
00130 {
00131 for (size_t __i = 0; __i < _Nw; __i++)
00132 _M_w[__i] |= __x._M_w[__i];
00133 }
00134
00135 void
00136 _M_do_xor(const _Base_bitset<_Nw>& __x)
00137 {
00138 for (size_t __i = 0; __i < _Nw; __i++)
00139 _M_w[__i] ^= __x._M_w[__i];
00140 }
00141
00142 void
00143 _M_do_left_shift(size_t __shift);
00144
00145 void
00146 _M_do_right_shift(size_t __shift);
00147
00148 void
00149 _M_do_flip()
00150 {
00151 for (size_t __i = 0; __i < _Nw; __i++)
00152 _M_w[__i] = ~_M_w[__i];
00153 }
00154
00155 void
00156 _M_do_set()
00157 {
00158 for (size_t __i = 0; __i < _Nw; __i++)
00159 _M_w[__i] = ~static_cast<_WordT>(0);
00160 }
00161
00162 void
00163 _M_do_reset() { memset(_M_w, 0, _Nw * sizeof(_WordT)); }
00164
00165 bool
00166 _M_is_equal(const _Base_bitset<_Nw>& __x) const
00167 {
00168 for (size_t __i = 0; __i < _Nw; ++__i)
00169 {
00170 if (_M_w[__i] != __x._M_w[__i])
00171 return false;
00172 }
00173 return true;
00174 }
00175
00176 bool
00177 _M_is_any() const
00178 {
00179 for (size_t __i = 0; __i < _Nw; __i++)
00180 {
00181 if (_M_w[__i] != static_cast<_WordT>(0))
00182 return true;
00183 }
00184 return false;
00185 }
00186
00187 size_t
00188 _M_do_count() const
00189 {
00190 size_t __result = 0;
00191 for (size_t __i = 0; __i < _Nw; __i++)
00192 __result += __builtin_popcountl(_M_w[__i]);
00193 return __result;
00194 }
00195
00196 unsigned long
00197 _M_do_to_ulong() const;
00198
00199
00200 size_t
00201 _M_do_find_first(size_t __not_found) const;
00202
00203
00204 size_t
00205 _M_do_find_next(size_t __prev, size_t __not_found) const;
00206 };
00207
00208
00209 template<size_t _Nw>
00210 void
00211 _Base_bitset<_Nw>::_M_do_left_shift(size_t __shift)
00212 {
00213 if (__builtin_expect(__shift != 0, 1))
00214 {
00215 const size_t __wshift = __shift / _GLIBCXX_BITSET_BITS_PER_WORD;
00216 const size_t __offset = __shift % _GLIBCXX_BITSET_BITS_PER_WORD;
00217
00218 if (__offset == 0)
00219 for (size_t __n = _Nw - 1; __n >= __wshift; --__n)
00220 _M_w[__n] = _M_w[__n - __wshift];
00221 else
00222 {
00223 const size_t __sub_offset = _GLIBCXX_BITSET_BITS_PER_WORD - __offset;
00224 for (size_t __n = _Nw - 1; __n > __wshift; --__n)
00225 _M_w[__n] = (_M_w[__n - __wshift] << __offset) |
00226 (_M_w[__n - __wshift - 1] >> __sub_offset);
00227 _M_w[__wshift] = _M_w[0] << __offset;
00228 }
00229
00230 std::fill(_M_w + 0, _M_w + __wshift, static_cast<_WordT>(0));
00231 }
00232 }
00233
00234 template<size_t _Nw>
00235 void
00236 _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift)
00237 {
00238 if (__builtin_expect(__shift != 0, 1))
00239 {
00240 const size_t __wshift = __shift / _GLIBCXX_BITSET_BITS_PER_WORD;
00241 const size_t __offset = __shift % _GLIBCXX_BITSET_BITS_PER_WORD;
00242 const size_t __limit = _Nw - __wshift - 1;
00243
00244 if (__offset == 0)
00245 for (size_t __n = 0; __n <= __limit; ++__n)
00246 _M_w[__n] = _M_w[__n + __wshift];
00247 else
00248 {
00249 const size_t __sub_offset = _GLIBCXX_BITSET_BITS_PER_WORD - __offset;
00250 for (size_t __n = 0; __n < __limit; ++__n)
00251 _M_w[__n] = (_M_w[__n + __wshift] >> __offset) |
00252 (_M_w[__n + __wshift + 1] << __sub_offset);
00253 _M_w[__limit] = _M_w[_Nw-1] >> __offset;
00254 }
00255
00256 std::fill(_M_w + __limit + 1, _M_w + _Nw, static_cast<_WordT>(0));
00257 }
00258 }
00259
00260 template<size_t _Nw>
00261 unsigned long
00262 _Base_bitset<_Nw>::_M_do_to_ulong() const
00263 {
00264 for (size_t __i = 1; __i < _Nw; ++__i)
00265 if (_M_w[__i])
00266 __throw_overflow_error(__N("_Base_bitset::_M_do_to_ulong"));
00267 return _M_w[0];
00268 }
00269
00270 template<size_t _Nw>
00271 size_t
00272 _Base_bitset<_Nw>::_M_do_find_first(size_t __not_found) const
00273 {
00274 for (size_t __i = 0; __i < _Nw; __i++)
00275 {
00276 _WordT __thisword = _M_w[__i];
00277 if (__thisword != static_cast<_WordT>(0))
00278 return __i * _GLIBCXX_BITSET_BITS_PER_WORD
00279 + __builtin_ctzl(__thisword);
00280 }
00281
00282 return __not_found;
00283 }
00284
00285 template<size_t _Nw>
00286 size_t
00287 _Base_bitset<_Nw>::_M_do_find_next(size_t __prev, size_t __not_found) const
00288 {
00289
00290 ++__prev;
00291
00292
00293 if (__prev >= _Nw * _GLIBCXX_BITSET_BITS_PER_WORD)
00294 return __not_found;
00295
00296
00297 size_t __i = _S_whichword(__prev);
00298 _WordT __thisword = _M_w[__i];
00299
00300
00301 __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
00302
00303 if (__thisword != static_cast<_WordT>(0))
00304 return __i * _GLIBCXX_BITSET_BITS_PER_WORD
00305 + __builtin_ctzl(__thisword);
00306
00307
00308 __i++;
00309 for ( ; __i < _Nw; __i++ )
00310 {
00311 __thisword = _M_w[__i];
00312 if (__thisword != static_cast<_WordT>(0))
00313 return __i * _GLIBCXX_BITSET_BITS_PER_WORD
00314 + __builtin_ctzl(__thisword);
00315 }
00316
00317 return __not_found;
00318 }
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328 template<>
00329 struct _Base_bitset<1>
00330 {
00331 typedef unsigned long _WordT;
00332 _WordT _M_w;
00333
00334 _Base_bitset( void ) : _M_w(0) {}
00335 _Base_bitset(unsigned long __val) : _M_w(__val) {}
00336
00337 static size_t
00338 _S_whichword(size_t __pos )
00339 { return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
00340
00341 static size_t
00342 _S_whichbyte(size_t __pos )
00343 { return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
00344
00345 static size_t
00346 _S_whichbit(size_t __pos )
00347 { return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
00348
00349 static _WordT
00350 _S_maskbit(size_t __pos )
00351 { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
00352
00353 _WordT&
00354 _M_getword(size_t) { return _M_w; }
00355
00356 _WordT
00357 _M_getword(size_t) const { return _M_w; }
00358
00359 _WordT&
00360 _M_hiword() { return _M_w; }
00361
00362 _WordT
00363 _M_hiword() const { return _M_w; }
00364
00365 void
00366 _M_do_and(const _Base_bitset<1>& __x) { _M_w &= __x._M_w; }
00367
00368 void
00369 _M_do_or(const _Base_bitset<1>& __x) { _M_w |= __x._M_w; }
00370
00371 void
00372 _M_do_xor(const _Base_bitset<1>& __x) { _M_w ^= __x._M_w; }
00373
00374 void
00375 _M_do_left_shift(size_t __shift) { _M_w <<= __shift; }
00376
00377 void
00378 _M_do_right_shift(size_t __shift) { _M_w >>= __shift; }
00379
00380 void
00381 _M_do_flip() { _M_w = ~_M_w; }
00382
00383 void
00384 _M_do_set() { _M_w = ~static_cast<_WordT>(0); }
00385
00386 void
00387 _M_do_reset() { _M_w = 0; }
00388
00389 bool
00390 _M_is_equal(const _Base_bitset<1>& __x) const
00391 { return _M_w == __x._M_w; }
00392
00393 bool
00394 _M_is_any() const { return _M_w != 0; }
00395
00396 size_t
00397 _M_do_count() const { return __builtin_popcountl(_M_w); }
00398
00399 unsigned long
00400 _M_do_to_ulong() const { return _M_w; }
00401
00402 size_t
00403 _M_do_find_first(size_t __not_found) const
00404 {
00405 if (_M_w != 0)
00406 return __builtin_ctzl(_M_w);
00407 else
00408 return __not_found;
00409 }
00410
00411
00412 size_t
00413 _M_do_find_next(size_t __prev, size_t __not_found) const
00414 {
00415 ++__prev;
00416 if (__prev >= ((size_t) _GLIBCXX_BITSET_BITS_PER_WORD))
00417 return __not_found;
00418
00419 _WordT __x = _M_w >> __prev;
00420 if (__x != 0)
00421 return __builtin_ctzl(__x) + __prev;
00422 else
00423 return __not_found;
00424 }
00425 };
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435 template<>
00436 struct _Base_bitset<0>
00437 {
00438 typedef unsigned long _WordT;
00439
00440 _Base_bitset() {}
00441 _Base_bitset(unsigned long) {}
00442
00443 static size_t
00444 _S_whichword(size_t __pos )
00445 { return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
00446
00447 static size_t
00448 _S_whichbyte(size_t __pos )
00449 { return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
00450
00451 static size_t
00452 _S_whichbit(size_t __pos )
00453 { return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
00454
00455 static _WordT
00456 _S_maskbit(size_t __pos )
00457 { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
00458
00459
00460
00461
00462
00463
00464
00465
00466 _WordT&
00467 _M_getword(size_t) const
00468 {
00469 __throw_out_of_range(__N("_Base_bitset::_M_getword"));
00470 return *new _WordT;
00471 }
00472
00473 _WordT
00474 _M_hiword() const { return 0; }
00475
00476 void
00477 _M_do_and(const _Base_bitset<0>&) { }
00478
00479 void
00480 _M_do_or(const _Base_bitset<0>&) { }
00481
00482 void
00483 _M_do_xor(const _Base_bitset<0>&) { }
00484
00485 void
00486 _M_do_left_shift(size_t) { }
00487
00488 void
00489 _M_do_right_shift(size_t) { }
00490
00491 void
00492 _M_do_flip() { }
00493
00494 void
00495 _M_do_set() { }
00496
00497 void
00498 _M_do_reset() { }
00499
00500
00501
00502
00503 bool
00504 _M_is_equal(const _Base_bitset<0>&) const { return true; }
00505
00506 bool
00507 _M_is_any() const { return false; }
00508
00509 size_t
00510 _M_do_count() const { return 0; }
00511
00512 unsigned long
00513 _M_do_to_ulong() const { return 0; }
00514
00515
00516
00517 size_t
00518 _M_do_find_first(size_t) const { return 0; }
00519
00520 size_t
00521 _M_do_find_next(size_t, size_t) const { return 0; }
00522 };
00523
00524
00525
00526 template<size_t _Extrabits>
00527 struct _Sanitize
00528 {
00529 static void _S_do_sanitize(unsigned long& __val)
00530 { __val &= ~((~static_cast<unsigned long>(0)) << _Extrabits); }
00531 };
00532
00533 template<>
00534 struct _Sanitize<0>
00535 { static void _S_do_sanitize(unsigned long) { } };
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602 template<size_t _Nb>
00603 class bitset : private _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)>
00604 {
00605 private:
00606 typedef _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)> _Base;
00607 typedef unsigned long _WordT;
00608
00609 void
00610 _M_do_sanitize()
00611 {
00612 _Sanitize<_Nb%_GLIBCXX_BITSET_BITS_PER_WORD>::
00613 _S_do_sanitize(this->_M_hiword());
00614 }
00615
00616 public:
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629 class reference
00630 {
00631 friend class bitset;
00632
00633 _WordT *_M_wp;
00634 size_t _M_bpos;
00635
00636
00637 reference();
00638
00639 public:
00640 reference(bitset& __b, size_t __pos)
00641 {
00642 _M_wp = &__b._M_getword(__pos);
00643 _M_bpos = _Base::_S_whichbit(__pos);
00644 }
00645
00646 ~reference() { }
00647
00648
00649 reference&
00650 operator=(bool __x)
00651 {
00652 if ( __x )
00653 *_M_wp |= _Base::_S_maskbit(_M_bpos);
00654 else
00655 *_M_wp &= ~_Base::_S_maskbit(_M_bpos);
00656 return *this;
00657 }
00658
00659
00660 reference&
00661 operator=(const reference& __j)
00662 {
00663 if ( (*(__j._M_wp) & _Base::_S_maskbit(__j._M_bpos)) )
00664 *_M_wp |= _Base::_S_maskbit(_M_bpos);
00665 else
00666 *_M_wp &= ~_Base::_S_maskbit(_M_bpos);
00667 return *this;
00668 }
00669
00670
00671 bool
00672 operator~() const
00673 { return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) == 0; }
00674
00675
00676 operator bool() const
00677 { return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) != 0; }
00678
00679
00680 reference&
00681 flip()
00682 {
00683 *_M_wp ^= _Base::_S_maskbit(_M_bpos);
00684 return *this;
00685 }
00686 };
00687 friend class reference;
00688
00689
00690
00691 bitset() { }
00692
00693
00694 bitset(unsigned long __val) : _Base(__val)
00695 { _M_do_sanitize(); }
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706 template<class _CharT, class _Traits, class _Alloc>
00707 explicit bitset(const basic_string<_CharT, _Traits, _Alloc>& __s,
00708 size_t __position = 0) : _Base()
00709 {
00710 if (__position > __s.size())
00711 __throw_out_of_range(__N("bitset::bitset initial position "
00712 "not valid"));
00713 _M_copy_from_string(__s, __position,
00714 basic_string<_CharT, _Traits, _Alloc>::npos);
00715 }
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726 template<class _CharT, class _Traits, class _Alloc>
00727 bitset(const basic_string<_CharT, _Traits, _Alloc>& __s,
00728 size_t __position, size_t __n) : _Base()
00729 {
00730 if (__position > __s.size())
00731 __throw_out_of_range(__N("bitset::bitset initial position "
00732 "not valid"));
00733 _M_copy_from_string(__s, __position, __n);
00734 }
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744 bitset<_Nb>&
00745 operator&=(const bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
00747 bitset<_Nb>& __rhs)
00746 {
007