bitset
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:33k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1998
  3.  * Silicon Graphics Computer Systems, Inc.
  4.  *
  5.  * Permission to use, copy, modify, distribute and sell this software
  6.  * and its documentation for any purpose is hereby granted without fee,
  7.  * provided that the above copyright notice appear in all copies and
  8.  * that both that copyright notice and this permission notice appear
  9.  * in supporting documentation.  Silicon Graphics makes no
  10.  * representations about the suitability of this software for any
  11.  * purpose.  It is provided "as is" without express or implied warranty.
  12.  */ 
  13. #ifndef __SGI_STL_BITSET
  14. #define __SGI_STL_BITSET
  15. // This implementation of bitset<> has a second template parameter,
  16. // _WordT, which defaults to unsigned long.  *YOU SHOULD NOT USE
  17. // THIS FEATURE*.  It is experimental, and it may be removed in
  18. // future releases.
  19. // A bitset of size N, using words of type _WordT, will have 
  20. // N % (sizeof(_WordT) * CHAR_BIT) unused bits.  (They are the high-
  21. // order bits in the highest word.)  It is a class invariant
  22. // of class bitset<> that those unused bits are always zero.
  23. // Most of the actual code isn't contained in bitset<> itself, but in the 
  24. // base class _Base_bitset.  The base class works with whole words, not with
  25. // individual bits.  This allows us to specialize _Base_bitset for the
  26. // important special case where the bitset is only a single word.
  27. // The C++ standard does not define the precise semantics of operator[].
  28. // In this implementation the const version of operator[] is equivalent
  29. // to test(), except that it does no range checking.  The non-const version
  30. // returns a reference to a bit, again without doing any range checking.
  31. #include <stddef.h>     // for size_t
  32. #include <string>
  33. #include <stdexcept>    // for invalid_argument, out_of_range, overflow_error
  34. #include <iostream.h>   // for istream, ostream
  35. #define __BITS_PER_WORDT(__wt) (CHAR_BIT*sizeof(__wt))
  36. #define __BITSET_WORDS(__n,__wt) 
  37.  ((__n) < 1 ? 1 : ((__n) + __BITS_PER_WORDT(__wt) - 1)/__BITS_PER_WORDT(__wt))
  38. __STL_BEGIN_NAMESPACE
  39. #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
  40. #pragma set woff 1209
  41. #endif
  42. // structure to aid in counting bits
  43. template<bool __dummy> 
  44. struct _Bit_count {
  45.   static unsigned char _S_bit_count[256];
  46. };
  47. // Mapping from 8 bit unsigned integers to the index of the first one
  48. // bit:
  49. template<bool __dummy> 
  50. struct _First_one {
  51.   static unsigned char _S_first_one[256];
  52. };
  53. //
  54. // Base class: general case.
  55. //
  56. template<size_t _Nw, class _WordT>
  57. struct _Base_bitset {
  58.   _WordT _M_w[_Nw];                // 0 is the least significant word.
  59.   _Base_bitset( void ) { _M_do_reset(); }
  60.   _Base_bitset(unsigned long __val);
  61.   static size_t _S_whichword( size_t __pos ) {
  62.     return __pos / __BITS_PER_WORDT(_WordT);
  63.   }
  64.   static size_t _S_whichbyte( size_t __pos ) {
  65.     return (__pos % __BITS_PER_WORDT(_WordT)) / CHAR_BIT;
  66.   }
  67.   static size_t _S_whichbit( size_t __pos ) {
  68.     return __pos % __BITS_PER_WORDT(_WordT);
  69.   }
  70.   static _WordT _S_maskbit( size_t __pos ) {
  71.     return (static_cast<_WordT>(1)) << _S_whichbit(__pos);
  72.   }
  73.   _WordT& _M_getword(size_t __pos)       { return _M_w[_S_whichword(__pos)]; }
  74.   _WordT  _M_getword(size_t __pos) const { return _M_w[_S_whichword(__pos)]; }
  75.   _WordT& _M_hiword()       { return _M_w[_Nw - 1]; }
  76.   _WordT  _M_hiword() const { return _M_w[_Nw - 1]; }
  77.   void _M_do_and(const _Base_bitset<_Nw,_WordT>& __x) {
  78.     for ( size_t __i = 0; __i < _Nw; __i++ ) {
  79.       _M_w[__i] &= __x._M_w[__i];
  80.     }
  81.   }
  82.   void _M_do_or(const _Base_bitset<_Nw,_WordT>& __x) {
  83.     for ( size_t __i = 0; __i < _Nw; __i++ ) {
  84.       _M_w[__i] |= __x._M_w[__i];
  85.     }
  86.   }
  87.   void _M_do_xor(const _Base_bitset<_Nw,_WordT>& __x) {
  88.     for ( size_t __i = 0; __i < _Nw; __i++ ) {
  89.       _M_w[__i] ^= __x._M_w[__i];
  90.     }
  91.   }
  92.   void _M_do_left_shift(size_t __shift);
  93.   void _M_do_right_shift(size_t __shift);
  94.   void _M_do_flip() {
  95.     for ( size_t __i = 0; __i < _Nw; __i++ ) {
  96.       _M_w[__i] = ~_M_w[__i];
  97.     }
  98.   }
  99.   void _M_do_set() {
  100.     for ( size_t __i = 0; __i < _Nw; __i++ ) {
  101.       _M_w[__i] = ~static_cast<_WordT>(0);
  102.     }
  103.   }
  104.   void _M_do_reset() {
  105.     for ( size_t __i = 0; __i < _Nw; __i++ ) {
  106.       _M_w[__i] = 0;
  107.     }
  108.   }
  109.   bool _M_is_equal(const _Base_bitset<_Nw,_WordT>& __x) const {
  110.     for (size_t __i = 0; __i < _Nw; ++__i) {
  111.       if (_M_w[__i] != __x._M_w[__i])
  112.         return false;
  113.     }
  114.     return true;
  115.   }
  116.   bool _M_is_any() const {
  117.     for ( size_t __i = 0; __i < __BITSET_WORDS(_Nw,_WordT); __i++ ) {
  118.       if ( _M_w[__i] != static_cast<_WordT>(0) )
  119.         return true;
  120.     }
  121.     return false;
  122.   }
  123.   size_t _M_do_count() const {
  124.     size_t __result = 0;
  125.     const unsigned char* __byte_ptr = (const unsigned char*)_M_w;
  126.     const unsigned char* __end_ptr = (const unsigned char*)(_M_w+_Nw);
  127.     while ( __byte_ptr < __end_ptr ) {
  128.       __result += _Bit_count<true>::_S_bit_count[*__byte_ptr];
  129.       __byte_ptr++;
  130.     }
  131.     return __result;
  132.   }
  133.   unsigned long _M_do_to_ulong() const; 
  134.   // find first "on" bit
  135.   size_t _M_do_find_first(size_t __not_found) const;
  136.   // find the next "on" bit that follows "prev"
  137.   size_t _M_do_find_next(size_t __prev, size_t __not_found) const;
  138. };
  139. //
  140. // Definitions of non-inline functions from _Base_bitset.
  141. // 
  142. template<size_t _Nw, class _WordT>
  143. _Base_bitset<_Nw, _WordT>::_Base_bitset(unsigned long __val)
  144. {
  145.   _M_do_reset();
  146.   const size_t __n = min(sizeof(unsigned long)*CHAR_BIT,
  147.                          __BITS_PER_WORDT(_WordT)*_Nw);
  148.   for(size_t __i = 0; __i < __n; ++__i, __val >>= 1)
  149.     if ( __val & 0x1 )
  150.       _M_getword(__i) |= _S_maskbit(__i);
  151. }
  152. template<size_t _Nw, class _WordT>
  153. void _Base_bitset<_Nw, _WordT>::_M_do_left_shift(size_t __shift) 
  154. {
  155.   if (__shift != 0) {
  156.     const size_t __wshift = __shift / __BITS_PER_WORDT(_WordT);
  157.     const size_t __offset = __shift % __BITS_PER_WORDT(_WordT);
  158.     const size_t __sub_offset = __BITS_PER_WORDT(_WordT) - __offset;
  159.     size_t __n = _Nw - 1;
  160.     for ( ; __n > __wshift; --__n)
  161.       _M_w[__n] = (_M_w[__n - __wshift] << __offset) | 
  162.                 (_M_w[__n - __wshift - 1] >> __sub_offset);
  163.     if (__n == __wshift)
  164.       _M_w[__n] = _M_w[0] << __offset;
  165.     for (size_t __n1 = 0; __n1 < __n; ++__n1)
  166.       _M_w[__n1] = static_cast<_WordT>(0);
  167.   }
  168. }
  169. template<size_t _Nw, class _WordT>
  170. void _Base_bitset<_Nw, _WordT>::_M_do_right_shift(size_t __shift) 
  171. {
  172.   if (__shift != 0) {
  173.     const size_t __wshift = __shift / __BITS_PER_WORDT(_WordT);
  174.     const size_t __offset = __shift % __BITS_PER_WORDT(_WordT);
  175.     const size_t __sub_offset = __BITS_PER_WORDT(_WordT) - __offset;
  176.     const size_t __limit = _Nw - __wshift - 1;
  177.     size_t __n = 0;
  178.     for ( ; __n < __limit; ++__n)
  179.       _M_w[__n] = (_M_w[__n + __wshift] >> __offset) | 
  180.                   (_M_w[__n + __wshift + 1] << __sub_offset);
  181.     _M_w[__limit] = _M_w[_Nw-1] >> __offset;
  182.     for (size_t __n1 = __limit + 1; __n1 < _Nw; ++__n1)
  183.       _M_w[__n1] = static_cast<_WordT>(0);
  184.   }
  185. }
  186. template<size_t _Nw, class _WordT>
  187. unsigned long _Base_bitset<_Nw, _WordT>::_M_do_to_ulong() const
  188. {
  189.   const overflow_error __overflow("bitset");
  190.   if (sizeof(_WordT) >= sizeof(unsigned long)) {
  191.     for (size_t __i = 1; __i < _Nw; ++__i) 
  192.       if (_M_w[__i]) 
  193.         __STL_THROW(__overflow);
  194.     const _WordT __mask = static_cast<_WordT>(static_cast<unsigned long>(-1));
  195.     if (_M_w[0] & ~__mask) 
  196.       __STL_THROW(__overflow);
  197.     return static_cast<unsigned long>(_M_w[0] & __mask);
  198.   }
  199.   else {                      // sizeof(_WordT) < sizeof(unsigned long).
  200.     const size_t __nwords =
  201.       (sizeof(unsigned long) + sizeof(_WordT) - 1) / sizeof(_WordT);
  202.     size_t __min_nwords = __nwords;
  203.     if (_Nw > __nwords) {
  204.       for (size_t __i = __nwords; __i < _Nw; ++__i) 
  205.         if (_M_w[__i]) 
  206.           __STL_THROW(__overflow);
  207.     }
  208.     else 
  209.       __min_nwords = _Nw;
  210.       
  211.     // If unsigned long is 8 bytes and _WordT is 6 bytes, then an unsigned
  212.     // long consists of all of one word plus 2 bytes from another word.
  213.     const size_t __part = sizeof(unsigned long) % sizeof(_WordT);
  214.     if (__part != 0 && __nwords <= _Nw && 
  215.         (_M_w[__min_nwords - 1] >> ((sizeof(_WordT) - __part) * CHAR_BIT)) != 0)
  216.       __STL_THROW(__overflow);
  217.     unsigned long __result = 0;
  218.     for (size_t __i = 0; __i < __min_nwords; ++__i) {
  219.       __result |= static_cast<unsigned long>(
  220.          _M_w[__i]) << (__i * sizeof(_WordT) * CHAR_BIT);
  221.     }
  222.     return __result;
  223.   }
  224. } // End _M_do_to_ulong
  225. template<size_t _Nw, class _WordT>
  226. size_t _Base_bitset<_Nw, _WordT>::_M_do_find_first(size_t __not_found) const 
  227. {
  228.   for ( size_t __i = 0; __i < _Nw; __i++ ) {
  229.     _WordT __thisword = _M_w[__i];
  230.     if ( __thisword != static_cast<_WordT>(0) ) {
  231.       // find byte within word
  232.       for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
  233.         unsigned char __this_byte
  234.           = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
  235.         if ( __this_byte )
  236.           return __i*__BITS_PER_WORDT(_WordT) + __j*CHAR_BIT +
  237.             _First_one<true>::_S_first_one[__this_byte];
  238.         __thisword >>= CHAR_BIT;
  239.       }
  240.     }
  241.   }
  242.   // not found, so return an indication of failure.
  243.   return __not_found;
  244. }
  245. template<size_t _Nw, class _WordT>
  246. size_t
  247. _Base_bitset<_Nw, _WordT>::_M_do_find_next(size_t __prev, 
  248.                                            size_t __not_found) const
  249. {
  250.   // make bound inclusive
  251.   ++__prev;
  252.   // check out of bounds
  253.   if ( __prev >= _Nw * __BITS_PER_WORDT(_WordT) )
  254.     return __not_found;
  255.     // search first word
  256.   size_t __i = _S_whichword(__prev);
  257.   _WordT __thisword = _M_w[__i];
  258.     // mask off bits below bound
  259.   __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
  260.   if ( __thisword != static_cast<_WordT>(0) ) {
  261.     // find byte within word
  262.     // get first byte into place
  263.     __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
  264.     for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); __j++ ) {
  265.       unsigned char __this_byte
  266.         = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
  267.       if ( __this_byte )
  268.         return __i*__BITS_PER_WORDT(_WordT) + __j*CHAR_BIT +
  269.           _First_one<true>::_S_first_one[__this_byte];
  270.       __thisword >>= CHAR_BIT;
  271.     }
  272.   }
  273.   // check subsequent words
  274.   __i++;
  275.   for ( ; __i < _Nw; __i++ ) {
  276.     _WordT __thisword = _M_w[__i];
  277.     if ( __thisword != static_cast<_WordT>(0) ) {
  278.       // find byte within word
  279.       for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
  280.         unsigned char __this_byte
  281.           = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
  282.         if ( __this_byte )
  283.           return __i*__BITS_PER_WORDT(_WordT) + __j*CHAR_BIT +
  284.             _First_one<true>::_S_first_one[__this_byte];
  285.         __thisword >>= CHAR_BIT;
  286.       }
  287.     }
  288.   }
  289.   // not found, so return an indication of failure.
  290.   return __not_found;
  291. } // end _M_do_find_next
  292. // ------------------------------------------------------------
  293. //
  294. // Base class: specialization for a single word.
  295. //
  296. template<class _WordT>
  297. struct _Base_bitset<1, _WordT> {
  298.   _WordT _M_w;
  299.   _Base_bitset( void ) { _M_do_reset(); }
  300.   _Base_bitset(unsigned long __val); 
  301.   static size_t _S_whichword( size_t __pos ) {
  302.     return __pos / __BITS_PER_WORDT(_WordT);
  303.   }
  304.   static size_t _S_whichbyte( size_t __pos ) {
  305.     return (__pos % __BITS_PER_WORDT(_WordT)) / CHAR_BIT;
  306.   }
  307.   static size_t _S_whichbit( size_t __pos ) {
  308.     return __pos % __BITS_PER_WORDT(_WordT);
  309.   }
  310.   static _WordT _S_maskbit( size_t __pos ) {
  311.     return (static_cast<_WordT>(1)) << _S_whichbit(__pos);
  312.   }
  313.   _WordT& _M_getword(size_t)       { return _M_w; }
  314.   _WordT  _M_getword(size_t) const { return _M_w; }
  315.   _WordT& _M_hiword()       { return _M_w; }
  316.   _WordT  _M_hiword() const { return _M_w; }
  317.   void _M_do_and(const _Base_bitset<1,_WordT>& __x) { _M_w &= __x._M_w; }
  318.   void _M_do_or(const _Base_bitset<1,_WordT>& __x)  { _M_w |= __x._M_w; }
  319.   void _M_do_xor(const _Base_bitset<1,_WordT>& __x) { _M_w ^= __x._M_w; }
  320.   void _M_do_left_shift(size_t __shift)     { _M_w <<= __shift; }
  321.   void _M_do_right_shift(size_t __shift)    { _M_w >>= __shift; }
  322.   void _M_do_flip()                       { _M_w = ~_M_w; }
  323.   void _M_do_set()                        { _M_w = ~static_cast<_WordT>(0); }
  324.   void _M_do_reset()                      { _M_w = 0; }
  325.   bool _M_is_equal(const _Base_bitset<1,_WordT>& __x) const {
  326.     return _M_w == __x._M_w;
  327.   }
  328.   bool _M_is_any() const {
  329.     return _M_w != 0;
  330.   }
  331.   size_t _M_do_count() const {
  332.     size_t __result = 0;
  333.     const unsigned char* __byte_ptr = (const unsigned char*)&_M_w;
  334.     const unsigned char* __end_ptr = ((const unsigned char*)&_M_w)+sizeof(_M_w);
  335.     while ( __byte_ptr < __end_ptr ) {
  336.       __result += _Bit_count<true>::_S_bit_count[*__byte_ptr];
  337.       __byte_ptr++;
  338.     }
  339.     return __result;
  340.   }
  341.   unsigned long _M_do_to_ulong() const {
  342.     if (sizeof(_WordT) <= sizeof(unsigned long))
  343.         return static_cast<unsigned long>(_M_w);
  344.     else {
  345.       const _WordT __mask = static_cast<_WordT>(static_cast<unsigned long>(-1));
  346.       if (_M_w & ~__mask) 
  347.         __STL_THROW(overflow_error("bitset"));
  348.       return static_cast<unsigned long>(_M_w);
  349.     }
  350.   }
  351.   size_t _M_do_find_first(size_t __not_found) const;
  352.   // find the next "on" bit that follows "prev"
  353.   size_t _M_do_find_next(size_t __prev, size_t __not_found) const; 
  354. };
  355. //
  356. // Definitions of non-inline functions from the single-word version of
  357. //  _Base_bitset.
  358. //
  359. template <class _WordT>
  360. _Base_bitset<1, _WordT>::_Base_bitset(unsigned long __val) 
  361. {
  362.   _M_do_reset();
  363.   const size_t __n = min(sizeof(unsigned long)*CHAR_BIT,
  364.                          __BITS_PER_WORDT(_WordT)*_Nw);
  365.   for(size_t __i = 0; i < __n; ++__i, __val >>= 1)
  366.     if ( __val & 0x1 )
  367.       _M_w |= _S_maskbit(__i);
  368. }
  369. template <class _WordT>
  370. size_t _Base_bitset<1, _WordT>::_M_do_find_first(size_t __not_found) const
  371. {
  372.   _WordT __thisword = _M_w;
  373.   if ( __thisword != static_cast<_WordT>(0) ) {
  374.     // find byte within word
  375.     for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
  376.       unsigned char __this_byte
  377.         = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
  378.       if ( __this_byte )
  379.         return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
  380.       __thisword >>= CHAR_BIT;
  381.     }
  382.   }
  383.   // not found, so return a value that indicates failure.
  384.   return __not_found;
  385. }
  386. template <class _WordT>
  387. size_t 
  388. _Base_bitset<1, _WordT>::_M_do_find_next(size_t __prev, 
  389.                                          size_t __not_found ) const
  390. {
  391.   // make bound inclusive
  392.   ++__prev;
  393.   // check out of bounds
  394.   if ( __prev >= __BITS_PER_WORDT(_WordT) )
  395.     return __not_found;
  396.     // search first (and only) word
  397.   _WordT __thisword = _M_w;
  398.   // mask off bits below bound
  399.   __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
  400.   if ( __thisword != static_cast<_WordT>(0) ) {
  401.     // find byte within word
  402.     // get first byte into place
  403.     __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
  404.     for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); __j++ ) {
  405.       unsigned char __this_byte
  406.         = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
  407.       if ( __this_byte )
  408.         return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
  409.       __thisword >>= CHAR_BIT;
  410.     }
  411.   }
  412.   // not found, so return a value that indicates failure.
  413.   return __not_found;
  414. } // end _M_do_find_next
  415. //
  416. // One last specialization: _M_do_to_ulong() and the constructor from
  417. // unsigned long are very simple if the bitset consists of a single 
  418. // word of type unsigned long.
  419. //
  420. template<>
  421. inline unsigned long 
  422. _Base_bitset<1, unsigned long>::_M_do_to_ulong() const { return _M_w; }
  423. template<>
  424. inline _Base_bitset<1, unsigned long>::_Base_bitset(unsigned long __val) {
  425.   _M_w = __val;
  426. }
  427. // ------------------------------------------------------------
  428. // Helper class to zero out the unused high-order bits in the highest word.
  429. template <class _WordT, size_t _Extrabits> struct _Sanitize {
  430.   static void _M_do_sanitize(_WordT& __val)
  431.     { __val &= ~((~static_cast<_WordT>(0)) << _Extrabits); }
  432. };
  433. template <class _WordT> struct _Sanitize<_WordT, 0> {
  434.   static void _M_do_sanitize(_WordT) {}
  435. };
  436. // ------------------------------------------------------------
  437. // Class bitset.
  438. //   _Nb may be any nonzero number of type size_t.
  439. //   Type _WordT may be any unsigned integral type.
  440. template<size_t _Nb, class _WordT = unsigned long>
  441. class bitset : private _Base_bitset<__BITSET_WORDS(_Nb,_WordT), _WordT> 
  442. {
  443. private:
  444.   typedef _Base_bitset<__BITSET_WORDS(_Nb,_WordT), _WordT> _Base;
  445.   // Import base's protected interface.  Necessary because of new template
  446.   // name resolution rules.
  447.   using _Base::_S_whichword;
  448.   using _Base::_S_whichbyte;
  449.   using _Base::_S_whichbit;
  450.   using _Base::_S_maskbit;
  451.   using _Base::_M_getword;
  452.   using _Base::_M_hiword;
  453.   using _Base::_M_do_and;
  454.   using _Base::_M_do_or;
  455.   using _Base::_M_do_xor;
  456.   using _Base::_M_do_left_shift;
  457.   using _Base::_M_do_right_shift;
  458.   using _Base::_M_do_flip;
  459.   using _Base::_M_do_set;
  460.   using _Base::_M_do_reset;
  461.   using _Base::_M_is_equal;
  462.   using _Base::_M_is_any;
  463.   using _Base::_M_do_count;
  464.   using _Base::_M_do_to_ulong;
  465.   using _Base::_M_do_find_first;
  466.   using _Base::_M_do_find_next;
  467. private:
  468.   void _M_do_sanitize() {
  469.     _Sanitize<_WordT,_Nb%__BITS_PER_WORDT(_WordT) >
  470.       ::_M_do_sanitize(_M_hiword());
  471.   }
  472. public:
  473.   // bit reference:
  474.   class reference {
  475.     friend class bitset;
  476.     _WordT *_M_wp;
  477.     size_t _M_bpos;
  478.     // left undefined
  479.     reference();
  480.     reference( bitset& __b, size_t __pos ) {
  481.       _M_wp = &__b._M_getword(__pos);
  482.       _M_bpos = _S_whichbit(__pos);
  483.     }
  484.   public:
  485.     ~reference() {}
  486.     // for b[i] = __x;
  487.     reference& operator=(bool __x) {
  488.       if ( __x )
  489.         *_M_wp |= _S_maskbit(_M_bpos);
  490.       else
  491.         *_M_wp &= ~_S_maskbit(_M_bpos);
  492.       return *this;
  493.     }
  494.     // for b[i] = b[__j];
  495.     reference& operator=(const reference& __j) {
  496.       if ( (*(__j._M_wp) & _S_maskbit(__j._M_bpos)) )
  497.         *_M_wp |= _S_maskbit(_M_bpos);
  498.       else
  499.         *_M_wp &= ~_S_maskbit(_M_bpos);
  500.       return *this;
  501.     }
  502.     // flips the bit
  503.     bool operator~() const { return (*(_M_wp) & _S_maskbit(_M_bpos)) == 0; }
  504.     // for __x = b[i];
  505.     operator bool() const { return (*(_M_wp) & _S_maskbit(_M_bpos)) != 0; }
  506.     // for b[i].flip();
  507.     reference& flip() {
  508.       *_M_wp ^= _S_maskbit(_M_bpos);
  509.       return *this;
  510.     }
  511.   };
  512.   // 23.3.5.1 constructors:
  513.   bitset() {}
  514.   bitset(unsigned long __val) : 
  515.     _Base_bitset<__BITSET_WORDS(_Nb,_WordT), _WordT>(__val) {}
  516.   template<class _CharT, class _Traits, class _Alloc>
  517.   explicit bitset(const basic_string<_CharT,_Traits,_Alloc>& __s,
  518.                   size_t __pos = 0,
  519.                   size_t __n = basic_string<_CharT,_Traits,_Alloc>::npos) 
  520.     : _Base() 
  521.   {
  522.     if (__pos > __s.size()) 
  523.       __STL_THROW(out_of_range("bitset"));
  524.     _M_copy_from_string(__s, __pos, __n);
  525.   }
  526.   // 23.3.5.2 bitset operations:
  527.   bitset<_Nb,_WordT>& operator&=(const bitset<_Nb,_WordT>& __rhs) {
  528.     _M_do_and(__rhs);
  529.     return *this;
  530.   }
  531.   bitset<_Nb,_WordT>& operator|=(const bitset<_Nb,_WordT>& __rhs) {
  532.     _M_do_or(__rhs);
  533.     return *this;
  534.   }
  535.   bitset<_Nb,_WordT>& operator^=(const bitset<_Nb,_WordT>& __rhs) {
  536.     _M_do_xor(__rhs);
  537.     return *this;
  538.   }
  539.   bitset<_Nb,_WordT>& operator<<=(size_t __pos) {
  540.     _M_do_left_shift(__pos);
  541.     _M_do_sanitize();
  542.     return *this;
  543.   }
  544.   bitset<_Nb,_WordT>& operator>>=(size_t __pos) {
  545.     _M_do_right_shift(__pos);
  546.     _M_do_sanitize();
  547.     return *this;
  548.   }
  549.   //
  550.   // Extension:
  551.   // Versions of single-bit set, reset, flip, test with no range checking.
  552.   //
  553.   bitset<_Nb,_WordT>& _Unchecked_set(size_t __pos) {
  554.     _M_getword(__pos) |= _S_maskbit(__pos);
  555.     return *this;
  556.   }
  557.   bitset<_Nb,_WordT>& _Unchecked_set(size_t __pos, int __val) {
  558.     if (__val)
  559.       _M_getword(__pos) |= _S_maskbit(__pos);
  560.     else
  561.       _M_getword(__pos) &= ~_S_maskbit(__pos);
  562.     return *this;
  563.   }
  564.   bitset<_Nb,_WordT>& _Unchecked_reset(size_t __pos) {
  565.     _M_getword(__pos) &= ~_S_maskbit(__pos);
  566.     return *this;
  567.   }
  568.   bitset<_Nb,_WordT>& _Unchecked_flip(size_t __pos) {
  569.     _M_getword(__pos) ^= _S_maskbit(__pos);
  570.     return *this;
  571.   }
  572.   bool _Unchecked_test(size_t __pos) const {
  573.     return (_M_getword(__pos) & _S_maskbit(__pos)) != static_cast<_WordT>(0);
  574.   }
  575.   // Set, reset, and flip.
  576.   bitset<_Nb,_WordT>& set() {
  577.     _M_do_set();
  578.     _M_do_sanitize();
  579.     return *this;
  580.   }
  581.   bitset<_Nb,_WordT>& set(size_t __pos) {
  582.     if (__pos >= _Nb)
  583.       __STL_THROW(out_of_range("bitset"));
  584.     return _Unchecked_set(__pos);
  585.   }
  586.   bitset<_Nb,_WordT>& set(size_t __pos, int __val) {
  587.     if (__pos >= _Nb)
  588.       __STL_THROW(out_of_range("bitset"));
  589.     return _Unchecked_set(__pos, __val);
  590.   }
  591.   bitset<_Nb,_WordT>& reset() {
  592.     _M_do_reset();
  593.     return *this;
  594.   }
  595.   bitset<_Nb,_WordT>& reset(size_t __pos) {
  596.     if (__pos >= _Nb)
  597.       __STL_THROW(out_of_range("bitset"));
  598.     return _Unchecked_reset(__pos);
  599.   }
  600.   bitset<_Nb,_WordT>& flip() {
  601.     _M_do_flip();
  602.     _M_do_sanitize();
  603.     return *this;
  604.   }
  605.   bitset<_Nb,_WordT>& flip(size_t __pos) {
  606.     if (__pos >= _Nb)
  607.       __STL_THROW(out_of_range("bitset"));
  608.     return _Unchecked_flip(__pos);
  609.   }
  610.   bitset<_Nb,_WordT> operator~() const { 
  611.     return bitset<_Nb,_WordT>(*this).flip();
  612.   }
  613.   // element access:
  614.   //for b[i];
  615.   reference operator[](size_t __pos) { return reference(*this,__pos); }
  616.   bool operator[](size_t __pos) const { return _Unchecked_test(__pos); }
  617.   unsigned long to_ulong() const { return _M_do_to_ulong(); }
  618. #if __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  619.   template <class _CharT, class _Traits, class _Alloc>
  620.   basic_string<_CharT, _Traits, _Alloc> to_string() const {
  621.     basic_string<_CharT, _Traits, _Alloc> __result;
  622.     _M_copy_to_string(__result);
  623.     return __result;
  624.   }
  625. #endif /* __STL_EXPLICIT_FUNCTION_TMPL_ARGS */
  626.   // Helper functions for string operations.
  627.   template<class _CharT, class _Traits, class _Alloc>
  628.   void _M_copy_from_string(const basic_string<_CharT,_Traits,_Alloc>& __s,
  629.                           size_t,
  630.                           size_t);
  631.   // Helper functions for string operations.
  632.   template<class _CharT, class _Traits, class _Alloc>
  633.   void _M_copy_to_string(basic_string<_CharT,_Traits,_Alloc>&) const;
  634.   size_t count() const { return _M_do_count(); }
  635.   size_t size() const { return _Nb; }
  636.   bool operator==(const bitset<_Nb,_WordT>& __rhs) const {
  637.     return _M_is_equal(__rhs);
  638.   }
  639.   bool operator!=(const bitset<_Nb,_WordT>& __rhs) const {
  640.     return !_M_is_equal(__rhs);
  641.   }
  642.   bool test(size_t __pos) const {
  643.     if (__pos > _Nb)
  644.       __STL_THROW(out_of_range("bitset"));
  645.     return _Unchecked_test(__pos);
  646.   }
  647.   bool any() const { return _M_is_any(); }
  648.   bool none() const { return !_M_is_any(); }
  649.   bitset<_Nb,_WordT> operator<<(size_t __pos) const
  650.     { return bitset<_Nb,_WordT>(*this) <<= __pos; }
  651.   bitset<_Nb,_WordT> operator>>(size_t __pos) const
  652.     { return bitset<_Nb,_WordT>(*this) >>= __pos; }
  653.   //
  654.   // EXTENSIONS: bit-find operations.  These operations are
  655.   // experimental, and are subject to change or removal in future
  656.   // versions.
  657.   // 
  658.   // find the index of the first "on" bit
  659.   size_t _Find_first() const 
  660.     { return _M_do_find_first(_Nb); }
  661.   // find the index of the next "on" bit after prev
  662.   size_t _Find_next( size_t __prev ) const 
  663.     { return _M_do_find_next(__prev, _Nb); }
  664. };
  665. //
  666. // Definitions of non-inline member functions.
  667. //
  668. template <size_t _Nb, class _WordT>
  669. template<class _CharT, class _Traits, class _Alloc>
  670. void bitset<_Nb, _WordT>
  671.   ::_M_copy_from_string(const basic_string<_CharT,_Traits,_Alloc>& __s,
  672.                         size_t __pos,
  673.                         size_t __n)
  674. {
  675.   reset();
  676.   const size_t __nbits = min(_Nb, min(__n, __s.size() - __pos));
  677.   for (size_t __i = 0; __i < __nbits; ++__i) {
  678.     switch(__s[__pos + __nbits - __i - 1]) {
  679.     case '0':
  680.       break;
  681.     case '1':
  682.       set(__i);
  683.       break;
  684.     default:
  685.       __STL_THROW(invalid_argument("bitset"));
  686.     }
  687.   }
  688. }
  689. template <size_t _Nb, class _WordT>
  690. template <class _CharT, class _Traits, class _Alloc>
  691. void bitset<_Nb, _WordT>
  692.   ::_M_copy_to_string(basic_string<_CharT, _Traits, _Alloc>& __s) const
  693. {
  694.   __s.assign(_Nb, '0');
  695.   
  696.   for (size_t __i = 0; __i < _Nb; ++__i) 
  697.     if (_Unchecked_test(__i))
  698.       __s[_Nb - 1 - __i] = '1';
  699. }
  700. // ------------------------------------------------------------
  701. //
  702. // 23.3.5.3 bitset operations:
  703. //
  704. template <size_t _Nb, class _WordT>
  705. inline bitset<_Nb,_WordT> operator&(const bitset<_Nb,_WordT>& __x,
  706.                                     const bitset<_Nb,_WordT>& __y) {
  707.   bitset<_Nb,_WordT> __result(__x);
  708.   __result &= __y;
  709.   return __result;
  710. }
  711. template <size_t _Nb, class _WordT>
  712. inline bitset<_Nb,_WordT> operator|(const bitset<_Nb,_WordT>& __x,
  713.                                     const bitset<_Nb,_WordT>& __y) {
  714.   bitset<_Nb,_WordT> __result(__x);
  715.   __result |= __y;
  716.   return __result;
  717. }
  718. template <size_t _Nb, class _WordT>
  719. inline bitset<_Nb,_WordT> operator^(const bitset<_Nb,_WordT>& __x,
  720.                                     const bitset<_Nb,_WordT>& __y) {
  721.   bitset<_Nb,_WordT> __result(__x);
  722.   __result ^= __y;
  723.   return __result;
  724. }
  725. // NOTE: these must be rewritten once we have templatized iostreams.
  726. template <size_t _Nb, class _WordT>
  727. istream&
  728. operator>>(istream& __is, bitset<_Nb,_WordT>& __x) {
  729.   string __tmp;
  730.   __tmp.reserve(_Nb);
  731.   // In new templatized iostreams, use istream::sentry
  732.   if (__is.flags() & ios::skipws) {
  733.     char __c;
  734.     do 
  735.       __is.get(__c);
  736.     while (__is && isspace(__c));
  737.     if (__is)
  738.       __is.putback(__c);
  739.   }
  740.   for (size_t __i = 0; __i < _Nb; ++__i) {
  741.     char __c;
  742.     __is.get(__c);
  743.     if (!__is)
  744.       break;
  745.     else if (__c != '0' && __c != '1') {
  746.       __is.putback(__c);
  747.       break;
  748.     }
  749.     else
  750.       __tmp.push_back(__c);
  751.   }
  752.   if (__tmp.empty()) 
  753.     __is.clear(__is.rdstate() | ios::failbit);
  754.   else
  755.     __x._M_copy_from_string(__tmp, static_cast<size_t>(0), _Nb);
  756.   return __is;
  757. }
  758. template <size_t _Nb, class _WordT>
  759. ostream& operator<<(ostream& __os, const bitset<_Nb,_WordT>& __x) {
  760.   string __tmp;
  761.   __x._M_copy_to_string(__tmp);
  762.   return __os << __tmp;
  763. }
  764. // ------------------------------------------------------------
  765. // Lookup tables for find and count operations.
  766. template<bool __dummy>
  767. unsigned char _Bit_count<__dummy>::_S_bit_count[] = {
  768.   0, /*   0 */ 1, /*   1 */ 1, /*   2 */ 2, /*   3 */ 1, /*   4 */
  769.   2, /*   5 */ 2, /*   6 */ 3, /*   7 */ 1, /*   8 */ 2, /*   9 */
  770.   2, /*  10 */ 3, /*  11 */ 2, /*  12 */ 3, /*  13 */ 3, /*  14 */
  771.   4, /*  15 */ 1, /*  16 */ 2, /*  17 */ 2, /*  18 */ 3, /*  19 */
  772.   2, /*  20 */ 3, /*  21 */ 3, /*  22 */ 4, /*  23 */ 2, /*  24 */
  773.   3, /*  25 */ 3, /*  26 */ 4, /*  27 */ 3, /*  28 */ 4, /*  29 */
  774.   4, /*  30 */ 5, /*  31 */ 1, /*  32 */ 2, /*  33 */ 2, /*  34 */
  775.   3, /*  35 */ 2, /*  36 */ 3, /*  37 */ 3, /*  38 */ 4, /*  39 */
  776.   2, /*  40 */ 3, /*  41 */ 3, /*  42 */ 4, /*  43 */ 3, /*  44 */
  777.   4, /*  45 */ 4, /*  46 */ 5, /*  47 */ 2, /*  48 */ 3, /*  49 */
  778.   3, /*  50 */ 4, /*  51 */ 3, /*  52 */ 4, /*  53 */ 4, /*  54 */
  779.   5, /*  55 */ 3, /*  56 */ 4, /*  57 */ 4, /*  58 */ 5, /*  59 */
  780.   4, /*  60 */ 5, /*  61 */ 5, /*  62 */ 6, /*  63 */ 1, /*  64 */
  781.   2, /*  65 */ 2, /*  66 */ 3, /*  67 */ 2, /*  68 */ 3, /*  69 */
  782.   3, /*  70 */ 4, /*  71 */ 2, /*  72 */ 3, /*  73 */ 3, /*  74 */
  783.   4, /*  75 */ 3, /*  76 */ 4, /*  77 */ 4, /*  78 */ 5, /*  79 */
  784.   2, /*  80 */ 3, /*  81 */ 3, /*  82 */ 4, /*  83 */ 3, /*  84 */
  785.   4, /*  85 */ 4, /*  86 */ 5, /*  87 */ 3, /*  88 */ 4, /*  89 */
  786.   4, /*  90 */ 5, /*  91 */ 4, /*  92 */ 5, /*  93 */ 5, /*  94 */
  787.   6, /*  95 */ 2, /*  96 */ 3, /*  97 */ 3, /*  98 */ 4, /*  99 */
  788.   3, /* 100 */ 4, /* 101 */ 4, /* 102 */ 5, /* 103 */ 3, /* 104 */
  789.   4, /* 105 */ 4, /* 106 */ 5, /* 107 */ 4, /* 108 */ 5, /* 109 */
  790.   5, /* 110 */ 6, /* 111 */ 3, /* 112 */ 4, /* 113 */ 4, /* 114 */
  791.   5, /* 115 */ 4, /* 116 */ 5, /* 117 */ 5, /* 118 */ 6, /* 119 */
  792.   4, /* 120 */ 5, /* 121 */ 5, /* 122 */ 6, /* 123 */ 5, /* 124 */
  793.   6, /* 125 */ 6, /* 126 */ 7, /* 127 */ 1, /* 128 */ 2, /* 129 */
  794.   2, /* 130 */ 3, /* 131 */ 2, /* 132 */ 3, /* 133 */ 3, /* 134 */
  795.   4, /* 135 */ 2, /* 136 */ 3, /* 137 */ 3, /* 138 */ 4, /* 139 */
  796.   3, /* 140 */ 4, /* 141 */ 4, /* 142 */ 5, /* 143 */ 2, /* 144 */
  797.   3, /* 145 */ 3, /* 146 */ 4, /* 147 */ 3, /* 148 */ 4, /* 149 */
  798.   4, /* 150 */ 5, /* 151 */ 3, /* 152 */ 4, /* 153 */ 4, /* 154 */
  799.   5, /* 155 */ 4, /* 156 */ 5, /* 157 */ 5, /* 158 */ 6, /* 159 */
  800.   2, /* 160 */ 3, /* 161 */ 3, /* 162 */ 4, /* 163 */ 3, /* 164 */
  801.   4, /* 165 */ 4, /* 166 */ 5, /* 167 */ 3, /* 168 */ 4, /* 169 */
  802.   4, /* 170 */ 5, /* 171 */ 4, /* 172 */ 5, /* 173 */ 5, /* 174 */
  803.   6, /* 175 */ 3, /* 176 */ 4, /* 177 */ 4, /* 178 */ 5, /* 179 */
  804.   4, /* 180 */ 5, /* 181 */ 5, /* 182 */ 6, /* 183 */ 4, /* 184 */
  805.   5, /* 185 */ 5, /* 186 */ 6, /* 187 */ 5, /* 188 */ 6, /* 189 */
  806.   6, /* 190 */ 7, /* 191 */ 2, /* 192 */ 3, /* 193 */ 3, /* 194 */
  807.   4, /* 195 */ 3, /* 196 */ 4, /* 197 */ 4, /* 198 */ 5, /* 199 */
  808.   3, /* 200 */ 4, /* 201 */ 4, /* 202 */ 5, /* 203 */ 4, /* 204 */
  809.   5, /* 205 */ 5, /* 206 */ 6, /* 207 */ 3, /* 208 */ 4, /* 209 */
  810.   4, /* 210 */ 5, /* 211 */ 4, /* 212 */ 5, /* 213 */ 5, /* 214 */
  811.   6, /* 215 */ 4, /* 216 */ 5, /* 217 */ 5, /* 218 */ 6, /* 219 */
  812.   5, /* 220 */ 6, /* 221 */ 6, /* 222 */ 7, /* 223 */ 3, /* 224 */
  813.   4, /* 225 */ 4, /* 226 */ 5, /* 227 */ 4, /* 228 */ 5, /* 229 */
  814.   5, /* 230 */ 6, /* 231 */ 4, /* 232 */ 5, /* 233 */ 5, /* 234 */
  815.   6, /* 235 */ 5, /* 236 */ 6, /* 237 */ 6, /* 238 */ 7, /* 239 */
  816.   4, /* 240 */ 5, /* 241 */ 5, /* 242 */ 6, /* 243 */ 5, /* 244 */
  817.   6, /* 245 */ 6, /* 246 */ 7, /* 247 */ 5, /* 248 */ 6, /* 249 */
  818.   6, /* 250 */ 7, /* 251 */ 6, /* 252 */ 7, /* 253 */ 7, /* 254 */
  819.   8  /* 255 */
  820. }; // end _Bit_count
  821. template<bool __dummy>
  822. unsigned char _First_one<__dummy>::_S_first_one[] = {
  823.   0, /*   0 */ 0, /*   1 */ 1, /*   2 */ 0, /*   3 */ 2, /*   4 */
  824.   0, /*   5 */ 1, /*   6 */ 0, /*   7 */ 3, /*   8 */ 0, /*   9 */
  825.   1, /*  10 */ 0, /*  11 */ 2, /*  12 */ 0, /*  13 */ 1, /*  14 */
  826.   0, /*  15 */ 4, /*  16 */ 0, /*  17 */ 1, /*  18 */ 0, /*  19 */
  827.   2, /*  20 */ 0, /*  21 */ 1, /*  22 */ 0, /*  23 */ 3, /*  24 */
  828.   0, /*  25 */ 1, /*  26 */ 0, /*  27 */ 2, /*  28 */ 0, /*  29 */
  829.   1, /*  30 */ 0, /*  31 */ 5, /*  32 */ 0, /*  33 */ 1, /*  34 */
  830.   0, /*  35 */ 2, /*  36 */ 0, /*  37 */ 1, /*  38 */ 0, /*  39 */
  831.   3, /*  40 */ 0, /*  41 */ 1, /*  42 */ 0, /*  43 */ 2, /*  44 */
  832.   0, /*  45 */ 1, /*  46 */ 0, /*  47 */ 4, /*  48 */ 0, /*  49 */
  833.   1, /*  50 */ 0, /*  51 */ 2, /*  52 */ 0, /*  53 */ 1, /*  54 */
  834.   0, /*  55 */ 3, /*  56 */ 0, /*  57 */ 1, /*  58 */ 0, /*  59 */
  835.   2, /*  60 */ 0, /*  61 */ 1, /*  62 */ 0, /*  63 */ 6, /*  64 */
  836.   0, /*  65 */ 1, /*  66 */ 0, /*  67 */ 2, /*  68 */ 0, /*  69 */
  837.   1, /*  70 */ 0, /*  71 */ 3, /*  72 */ 0, /*  73 */ 1, /*  74 */
  838.   0, /*  75 */ 2, /*  76 */ 0, /*  77 */ 1, /*  78 */ 0, /*  79 */
  839.   4, /*  80 */ 0, /*  81 */ 1, /*  82 */ 0, /*  83 */ 2, /*  84 */
  840.   0, /*  85 */ 1, /*  86 */ 0, /*  87 */ 3, /*  88 */ 0, /*  89 */
  841.   1, /*  90 */ 0, /*  91 */ 2, /*  92 */ 0, /*  93 */ 1, /*  94 */
  842.   0, /*  95 */ 5, /*  96 */ 0, /*  97 */ 1, /*  98 */ 0, /*  99 */
  843.   2, /* 100 */ 0, /* 101 */ 1, /* 102 */ 0, /* 103 */ 3, /* 104 */
  844.   0, /* 105 */ 1, /* 106 */ 0, /* 107 */ 2, /* 108 */ 0, /* 109 */
  845.   1, /* 110 */ 0, /* 111 */ 4, /* 112 */ 0, /* 113 */ 1, /* 114 */
  846.   0, /* 115 */ 2, /* 116 */ 0, /* 117 */ 1, /* 118 */ 0, /* 119 */
  847.   3, /* 120 */ 0, /* 121 */ 1, /* 122 */ 0, /* 123 */ 2, /* 124 */
  848.   0, /* 125 */ 1, /* 126 */ 0, /* 127 */ 7, /* 128 */ 0, /* 129 */
  849.   1, /* 130 */ 0, /* 131 */ 2, /* 132 */ 0, /* 133 */ 1, /* 134 */
  850.   0, /* 135 */ 3, /* 136 */ 0, /* 137 */ 1, /* 138 */ 0, /* 139 */
  851.   2, /* 140 */ 0, /* 141 */ 1, /* 142 */ 0, /* 143 */ 4, /* 144 */
  852.   0, /* 145 */ 1, /* 146 */ 0, /* 147 */ 2, /* 148 */ 0, /* 149 */
  853.   1, /* 150 */ 0, /* 151 */ 3, /* 152 */ 0, /* 153 */ 1, /* 154 */
  854.   0, /* 155 */ 2, /* 156 */ 0, /* 157 */ 1, /* 158 */ 0, /* 159 */
  855.   5, /* 160 */ 0, /* 161 */ 1, /* 162 */ 0, /* 163 */ 2, /* 164 */
  856.   0, /* 165 */ 1, /* 166 */ 0, /* 167 */ 3, /* 168 */ 0, /* 169 */
  857.   1, /* 170 */ 0, /* 171 */ 2, /* 172 */ 0, /* 173 */ 1, /* 174 */
  858.   0, /* 175 */ 4, /* 176 */ 0, /* 177 */ 1, /* 178 */ 0, /* 179 */
  859.   2, /* 180 */ 0, /* 181 */ 1, /* 182 */ 0, /* 183 */ 3, /* 184 */
  860.   0, /* 185 */ 1, /* 186 */ 0, /* 187 */ 2, /* 188 */ 0, /* 189 */
  861.   1, /* 190 */ 0, /* 191 */ 6, /* 192 */ 0, /* 193 */ 1, /* 194 */
  862.   0, /* 195 */ 2, /* 196 */ 0, /* 197 */ 1, /* 198 */ 0, /* 199 */
  863.   3, /* 200 */ 0, /* 201 */ 1, /* 202 */ 0, /* 203 */ 2, /* 204 */
  864.   0, /* 205 */ 1, /* 206 */ 0, /* 207 */ 4, /* 208 */ 0, /* 209 */
  865.   1, /* 210 */ 0, /* 211 */ 2, /* 212 */ 0, /* 213 */ 1, /* 214 */
  866.   0, /* 215 */ 3, /* 216 */ 0, /* 217 */ 1, /* 218 */ 0, /* 219 */
  867.   2, /* 220 */ 0, /* 221 */ 1, /* 222 */ 0, /* 223 */ 5, /* 224 */
  868.   0, /* 225 */ 1, /* 226 */ 0, /* 227 */ 2, /* 228 */ 0, /* 229 */
  869.   1, /* 230 */ 0, /* 231 */ 3, /* 232 */ 0, /* 233 */ 1, /* 234 */
  870.   0, /* 235 */ 2, /* 236 */ 0, /* 237 */ 1, /* 238 */ 0, /* 239 */
  871.   4, /* 240 */ 0, /* 241 */ 1, /* 242 */ 0, /* 243 */ 2, /* 244 */
  872.   0, /* 245 */ 1, /* 246 */ 0, /* 247 */ 3, /* 248 */ 0, /* 249 */
  873.   1, /* 250 */ 0, /* 251 */ 2, /* 252 */ 0, /* 253 */ 1, /* 254 */
  874.   0, /* 255 */
  875. }; // end _First_one
  876. #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
  877. #pragma reset woff 1209
  878. #endif
  879. __STL_END_NAMESPACE
  880. #undef __BITS_PER_WORDT
  881. #undef __BITSET_WORDS
  882. #endif /* __SGI_STL_BITSET */
  883. // Local Variables:
  884. // mode:C++
  885. // End: