19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1998
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_BITSET_C
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_BITSET_C
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_BITSET_H
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_bitset.h>
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __BITS_PER_WORD (CHAR_BIT * sizeof(unsigned long))
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Definitions of non-inline functions from _Base_bitset.
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<size_t _Nw>
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Base_bitset<_Nw>::_M_do_left_shift(size_t __shift) {
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__shift != 0) {
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const size_t __wshift = __shift / __BITS_PER_WORD;
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const size_t __offset = __shift % __BITS_PER_WORD;
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__offset == 0)
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      for (size_t __n = _Nw - 1; __n >= __wshift; --__n)
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _M_w[__n] = _M_w[__n - __wshift];
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else {
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      const size_t __sub_offset = __BITS_PER_WORD - __offset;
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      for (size_t __n = _Nw - 1; __n > __wshift; --__n)
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _M_w[__n] = (_M_w[__n - __wshift] << __offset) |
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                    (_M_w[__n - __wshift - 1] >> __sub_offset);
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_w[__wshift] = _M_w[0] << __offset;
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    fill(_M_w + 0, _M_w + __wshift, __STATIC_CAST(_WordT,0));
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<size_t _Nw>
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift) {
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__shift != 0) {
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const size_t __wshift = __shift / __BITS_PER_WORD;
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const size_t __offset = __shift % __BITS_PER_WORD;
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const size_t __limit = _Nw - __wshift - 1;
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__offset == 0)
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      for (size_t __n = 0; __n <= __limit; ++__n)
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _M_w[__n] = _M_w[__n + __wshift];
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else {
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      const size_t __sub_offset = __BITS_PER_WORD - __offset;
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      for (size_t __n = 0; __n < __limit; ++__n)
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _M_w[__n] = (_M_w[__n + __wshift] >> __offset) |
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                    (_M_w[__n + __wshift + 1] << __sub_offset);
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_w[__limit] = _M_w[_Nw-1] >> __offset;
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    fill(_M_w + __limit + 1, _M_w + _Nw, __STATIC_CAST(_WordT,0));
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<size_t _Nw>
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockunsigned long _Base_bitset<_Nw>::_M_do_to_ulong() const {
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for (size_t __i = 1; __i < _Nw; ++__i)
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (_M_w[__i])
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __stl_throw_overflow_error("bitset");
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return _M_w[0];
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} // End _M_do_to_ulong
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<size_t _Nw>
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksize_t _Base_bitset<_Nw>::_M_do_find_first(size_t __not_found) const {
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for ( size_t __i = 0; __i < _Nw; __i++ ) {
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _WordT __thisword = _M_w[__i];
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if ( __thisword != __STATIC_CAST(_WordT,0) ) {
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      // find byte within word
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        unsigned char __this_byte
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          = __STATIC_CAST(unsigned char,(__thisword & (~(unsigned char)0)));
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        if ( __this_byte )
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          return __i*__BITS_PER_WORD + __j*CHAR_BIT +
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            _Bs_G::_S_first_one(__this_byte);
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __thisword >>= CHAR_BIT;
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // not found, so return an indication of failure.
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __not_found;
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<size_t _Nw>
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksize_t
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Base_bitset<_Nw>::_M_do_find_next(size_t __prev,
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                   size_t __not_found) const {
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // make bound inclusive
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ++__prev;
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // check out of bounds
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if ( __prev >= _Nw * __BITS_PER_WORD )
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __not_found;
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // search first word
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_t __i = _S_whichword(__prev);
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _WordT __thisword = _M_w[__i];
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // mask off bits below bound
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __thisword &= (~__STATIC_CAST(_WordT,0)) << _S_whichbit(__prev);
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if ( __thisword != __STATIC_CAST(_WordT,0) ) {
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // find byte within word
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // get first byte into place
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); ++__j ) {
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      unsigned char __this_byte
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        = __STATIC_CAST(unsigned char,(__thisword & (~(unsigned char)0)));
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if ( __this_byte )
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        return __i*__BITS_PER_WORD + __j*CHAR_BIT +
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          _Bs_G::_S_first_one(__this_byte);
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __thisword >>= CHAR_BIT;
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // check subsequent words
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ++__i;
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for ( ; __i < _Nw; ++__i ) {
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /* _WordT */ __thisword = _M_w[__i];
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if ( __thisword != __STATIC_CAST(_WordT,0) ) {
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      // find byte within word
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      for ( size_t __j = 0; __j < sizeof(_WordT); ++__j ) {
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        unsigned char __this_byte
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          = __STATIC_CAST(unsigned char,(__thisword & (~(unsigned char)0)));
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        if ( __this_byte )
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          return __i*__BITS_PER_WORD + __j*CHAR_BIT +
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            _Bs_G::_S_first_one(__this_byte);
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __thisword >>= CHAR_BIT;
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // not found, so return an indication of failure.
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __not_found;
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} // end _M_do_find_next
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NON_TYPE_TMPL_PARAM_BUG)
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_USE_NO_IOSTREAMS)
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_STRING_IO_H
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_string_io.h> //includes _istream.h and _ostream.h
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, size_t _Nb>
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_istream<_CharT, _Traits>& _STLP_CALL
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x) {
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string<_CharT, _Traits> __tmp;
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __tmp.reserve(_Nb);
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Skip whitespace
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typename basic_istream<_CharT, _Traits>::sentry __sentry(__is);
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__sentry) {
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    basic_streambuf<_CharT, _Traits>* __buf = __is.rdbuf();
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    for (size_t __i = 0; __i < _Nb; ++__i) {
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      static typename _Traits::int_type __eof = _Traits::eof();
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      typename _Traits::int_type __c1 = __buf->sbumpc();
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (_Traits::eq_int_type(__c1, __eof)) {
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __is.setstate(ios_base::eofbit);
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        break;
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else {
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        typename _Traits::char_type __c2 = _Traits::to_char_type(__c1);
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        char __c = __is.narrow(__c2, '*');
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        if (__c == '0' || __c == '1')
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          __tmp.push_back(__c);
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        else if (_Traits::eq_int_type(__buf->sputbackc(__c2), __eof)) {
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          __is.setstate(ios_base::failbit);
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          break;
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        }
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__tmp.empty())
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __is.setstate(ios_base::failbit);
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __x._M_copy_from_string(__tmp, __STATIC_CAST(size_t,0), _Nb);
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __is;
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, size_t _Nb>
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& _STLP_CALL
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os,
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const bitset<_Nb>& __x) {
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string<_CharT, _Traits> __tmp;
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __x._M_copy_to_string(__tmp);
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __os << __tmp;
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* !_STLP_USE_NO_IOSTREAMS */
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_NON_TYPE_TMPL_PARAM_BUG */
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef __BITS_PER_WORD
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef bitset
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*  _STLP_BITSET_C */
236