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