diff options
author | Alexander Kabaev <kan@FreeBSD.org> | 2004-07-28 03:12:05 +0000 |
---|---|---|
committer | Alexander Kabaev <kan@FreeBSD.org> | 2004-07-28 03:12:05 +0000 |
commit | ffeaf689a248da869b6bc8d4fd2233dfe513c060 (patch) | |
tree | 75ef0e6da73746d6849e25a0996ae34e1aeff51d /contrib/libstdc++/include/bits/ostream.tcc | |
parent | 9a63ad9273061dc19cbd117762e365ea9634e241 (diff) | |
download | src-ffeaf689a248da869b6bc8d4fd2233dfe513c060.tar.gz src-ffeaf689a248da869b6bc8d4fd2233dfe513c060.zip |
Gcc 3.4.2 20040728 C++ support bits.
Notes
Notes:
svn path=/vendor/gcc/dist/; revision=132720
Diffstat (limited to 'contrib/libstdc++/include/bits/ostream.tcc')
-rw-r--r-- | contrib/libstdc++/include/bits/ostream.tcc | 654 |
1 files changed, 315 insertions, 339 deletions
diff --git a/contrib/libstdc++/include/bits/ostream.tcc b/contrib/libstdc++/include/bits/ostream.tcc index ab15ae8703be..2d1b5b419cfc 100644 --- a/contrib/libstdc++/include/bits/ostream.tcc +++ b/contrib/libstdc++/include/bits/ostream.tcc @@ -1,6 +1,6 @@ // ostream classes -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -32,16 +32,19 @@ // ISO C++ 14882: 27.6.2 Output streams // +#ifndef _OSTREAM_TCC +#define _OSTREAM_TCC 1 + #pragma GCC system_header #include <locale> -namespace std +namespace std { template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>::sentry:: - sentry(basic_ostream<_CharT,_Traits>& __os) - : _M_os(__os) + sentry(basic_ostream<_CharT, _Traits>& __os) + : _M_ok(false), _M_os(__os) { // XXX MT if (__os.tie() && __os.good()) @@ -50,418 +53,417 @@ namespace std if (__os.good()) _M_ok = true; else - { - _M_ok = false; - __os.setstate(ios_base::failbit); - } + __os.setstate(ios_base::failbit); } - + template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: operator<<(__ostream_type& (*__pf)(__ostream_type&)) { - sentry __cerb(*this); - if (__cerb) - { - try - { __pf(*this); } - catch(...) - { - // 27.6.2.5.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } - } - return *this; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // The inserters for manipulators are *not* formatted output functions. + return __pf(*this); } - + template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: operator<<(__ios_type& (*__pf)(__ios_type&)) { - sentry __cerb(*this); - if (__cerb) - { - try - { __pf(*this); } - catch(...) - { - // 27.6.2.5.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } - } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // The inserters for manipulators are *not* formatted output functions. + __pf(*this); return *this; } template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: operator<<(ios_base& (*__pf)(ios_base&)) { - sentry __cerb(*this); - if (__cerb) - { - try - { __pf(*this); } - catch(...) - { - // 27.6.2.5.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } - } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // The inserters for manipulators are *not* formatted output functions. + __pf(*this); return *this; } template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sbin) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(bool __n) { sentry __cerb(*this); - if (__cerb && __sbin) + if (__cerb) { + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); try { - if (!__copy_streambufs(*this, __sbin, this->rdbuf())) - this->setstate(ios_base::failbit); + const __num_put_type& __np = __check_facet(this->_M_num_put); + if (__np.put(*this, *this, this->fill(), __n).failed()) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.2.5.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } - else if (!__sbin) - this->setstate(ios_base::badbit); return *this; } template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(bool __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(long __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - if (_M_check_facet(_M_fnumput)) - if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) - this->setstate(ios_base::badbit); + bool __b = false; + const char_type __c = this->fill(); + const ios_base::fmtflags __fmt = (this->flags() + & ios_base::basefield); + const __num_put_type& __np = __check_facet(this->_M_num_put); + if ((__fmt & ios_base::oct) || (__fmt & ios_base::hex)) + { + const unsigned long __l = static_cast<unsigned long>(__n); + __b = __np.put(*this, *this, __c, __l).failed(); + } + else + __b = __np.put(*this, *this, __c, __n).failed(); + if (__b) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(long __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(unsigned long __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - char_type __c = this->fill(); - ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; - if (_M_check_facet(_M_fnumput)) - { - bool __b = false; - if ((__fmt & ios_base::oct) || (__fmt & ios_base::hex)) - { - unsigned long __l = static_cast<unsigned long>(__n); - __b = _M_fnumput->put(*this, *this, __c, __l).failed(); - } - else - __b = _M_fnumput->put(*this, *this, __c, __n).failed(); - if (__b) - this->setstate(ios_base::badbit); - } + const __num_put_type& __np = __check_facet(this->_M_num_put); + if (__np.put(*this, *this, this->fill(), __n).failed()) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } +#ifdef _GLIBCXX_USE_LONG_LONG template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(unsigned long __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(long long __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - if (_M_check_facet(_M_fnumput)) - if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) - this->setstate(ios_base::badbit); + bool __b = false; + const char_type __c = this->fill(); + const ios_base::fmtflags __fmt = (this->flags() + & ios_base::basefield); + const __num_put_type& __np = __check_facet(this->_M_num_put); + if ((__fmt & ios_base::oct) || (__fmt & ios_base::hex)) + { + const unsigned long long __l = (static_cast< + unsigned long long>(__n)); + __b = __np.put(*this, *this, __c, __l).failed(); + } + else + __b = __np.put(*this, *this, __c, __n).failed(); + if (__b) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } -#ifdef _GLIBCPP_USE_LONG_LONG template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(long long __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(unsigned long long __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - char_type __c = this->fill(); - ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; - if (_M_check_facet(_M_fnumput)) - { - bool __b = false; - if ((__fmt & ios_base::oct) || (__fmt & ios_base::hex)) - { - unsigned long long __l; - __l = static_cast<unsigned long long>(__n); - __b = _M_fnumput->put(*this, *this, __c, __l).failed(); - } - else - __b = _M_fnumput->put(*this, *this, __c, __n).failed(); - if (__b) - this->setstate(ios_base::badbit); - } + const __num_put_type& __np = __check_facet(this->_M_num_put); + if (__np.put(*this, *this, this->fill(), __n).failed()) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } +#endif template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(double __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - if (_M_check_facet(_M_fnumput)) - if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) - this->setstate(ios_base::badbit); + const __num_put_type& __np = __check_facet(this->_M_num_put); + if (__np.put(*this, *this, this->fill(), __n).failed()) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } -#endif - + template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(double __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(long double __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - if (_M_check_facet(_M_fnumput)) - if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) - this->setstate(ios_base::badbit); + const __num_put_type& __np = __check_facet(this->_M_num_put); + if (__np.put(*this, *this, this->fill(), __n).failed()) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } - + template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(long double __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(const void* __n) { sentry __cerb(*this); - if (__cerb) + if (__cerb) { - try + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { - if (_M_check_facet(_M_fnumput)) - if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) - this->setstate(ios_base::badbit); + const __num_put_type& __np = __check_facet(this->_M_num_put); + if (__np.put(*this, *this, this->fill(), __n).failed()) + __err |= ios_base::badbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } template<typename _CharT, typename _Traits> - basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::operator<<(const void* __n) + basic_ostream<_CharT, _Traits>& + basic_ostream<_CharT, _Traits>:: + operator<<(__streambuf_type* __sbin) { + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); sentry __cerb(*this); - if (__cerb) + if (__cerb && __sbin) { - try + try { - if (_M_check_facet(_M_fnumput)) - if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) - this->setstate(ios_base::badbit); + if (!__copy_streambufs(__sbin, this->rdbuf())) + __err |= ios_base::failbit; } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - this->_M_setstate(ios_base::badbit); - if ((this->exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { this->_M_setstate(ios_base::failbit); } } + else if (!__sbin) + __err |= ios_base::badbit; + if (__err) + this->setstate(__err); return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::put(char_type __c) - { + basic_ostream<_CharT, _Traits>:: + put(char_type __c) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // basic_ostream::put(char_type) is an unformatted output function. + // DR 63. Exception-handling policy for unformatted output. + // Unformatted output functions should catch exceptions thrown + // from streambuf members. sentry __cerb(*this); - if (__cerb) + if (__cerb) { - int_type __put = rdbuf()->sputc(__c); - if (traits_type::eq_int_type(__put, traits_type::eof())) - this->setstate(ios_base::badbit); + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try + { + const int_type __put = this->rdbuf()->sputc(__c); + if (traits_type::eq_int_type(__put, traits_type::eof())) + __err |= ios_base::badbit; + } + catch (...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::write(const _CharT* __s, streamsize __n) + basic_ostream<_CharT, _Traits>:: + write(const _CharT* __s, streamsize __n) { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // basic_ostream::write(const char_type*, streamsize) is an + // unformatted output function. + // DR 63. Exception-handling policy for unformatted output. + // Unformatted output functions should catch exceptions thrown + // from streambuf members. sentry __cerb(*this); if (__cerb) { - streamsize __put = this->rdbuf()->sputn(__s, __n); - if ( __put != __n) - this->setstate(ios_base::badbit); + try + { _M_write(__s, __n); } + catch (...) + { this->_M_setstate(ios_base::badbit); } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::flush() + basic_ostream<_CharT, _Traits>:: + flush() { - sentry __cerb(*this); - if (__cerb) + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 60. What is a formatted input function? + // basic_ostream::flush() is *not* an unformatted output function. + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { if (this->rdbuf() && this->rdbuf()->pubsync() == -1) - this->setstate(ios_base::badbit); + __err |= ios_base::badbit; } + catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); return *this; } - + template<typename _CharT, typename _Traits> typename basic_ostream<_CharT, _Traits>::pos_type - basic_ostream<_CharT, _Traits>::tellp() + basic_ostream<_CharT, _Traits>:: + tellp() { pos_type __ret = pos_type(-1); - if (!this->fail()) - __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); + try + { + if (!this->fail()) + __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); + } + catch(...) + { this->_M_setstate(ios_base::badbit); } return __ret; } - template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& - basic_ostream<_CharT, _Traits>::seekp(pos_type __pos) + basic_ostream<_CharT, _Traits>:: + seekp(pos_type __pos) { - if (!this->fail()) + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { -#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS -// 136. seekp, seekg setting wrong streams? - pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::out); + if (!this->fail()) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 136. seekp, seekg setting wrong streams? + const pos_type __p = this->rdbuf()->pubseekpos(__pos, + ios_base::out); -// 129. Need error indication from seekp() and seekg() - if (__err == pos_type(off_type(-1))) - this->setstate(ios_base::failbit); -#endif + // 129. Need error indication from seekp() and seekg() + if (__p == pos_type(off_type(-1))) + __err |= ios_base::failbit; + } } + catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: - seekp(off_type __off, ios_base::seekdir __d) + seekp(off_type __off, ios_base::seekdir __dir) { - if (!this->fail()) + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try { -#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS -// 136. seekp, seekg setting wrong streams? - pos_type __err = this->rdbuf()->pubseekoff(__off, __d, - ios_base::out); - -// 129. Need error indication from seekp() and seekg() - if (__err == pos_type(off_type(-1))) - this->setstate(ios_base::failbit); -#endif + if (!this->fail()) + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 136. seekp, seekg setting wrong streams? + const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, + ios_base::out); + + // 129. Need error indication from seekp() and seekg() + if (__p == pos_type(off_type(-1))) + __err |= ios_base::failbit; + } } + catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); return *this; } @@ -474,35 +476,30 @@ namespace std typename __ostream_type::sentry __cerb(__out); if (__cerb) { - try + try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__w + 1))); - __pads[0] = __c; + const streamsize __w = __out.width(); streamsize __len = 1; + _CharT* __cs = &__c; if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, + __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, &__c, __w, __len, false); __len = __w; } - __out.write(__pads, __len); + __out._M_write(__cs, __len); __out.width(0); } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - __out._M_setstate(ios_base::badbit); - if ((__out.exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { __out._M_setstate(ios_base::badbit); } } return __out; } - + // Specializations. - template <class _Traits> + template <class _Traits> basic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& __out, char __c) { @@ -510,29 +507,23 @@ namespace std typename __ostream_type::sentry __cerb(__out); if (__cerb) { - try + try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - char* __pads = static_cast<char*>(__builtin_alloca(__w + 1)); - __pads[0] = __c; + const streamsize __w = __out.width(); streamsize __len = 1; + char* __cs = &__c; if (__w > __len) { - __pad<char, _Traits>::_S_pad(__out, __out.fill(), __pads, + __cs = static_cast<char*>(__builtin_alloca(__w)); + __pad<char, _Traits>::_S_pad(__out, __out.fill(), __cs, &__c, __w, __len, false); __len = __w; } - __out.write(__pads, __len); + __out._M_write(__cs, __len); __out.width(0); } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - __out._M_setstate(ios_base::badbit); - if ((__out.exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { __out._M_setstate(ios_base::badbit); } } return __out; } @@ -545,29 +536,25 @@ namespace std typename __ostream_type::sentry __cerb(__out); if (__cerb && __s) { - try + try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w)); + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(_Traits::length(__s)); if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, + _CharT* __cs = (static_cast< + _CharT*>(__builtin_alloca(sizeof(_CharT) + * __w))); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __s, __w, __len, false); - __s = __pads; + __s = __cs; __len = __w; } - __out.write(__s, __len); + __out._M_write(__s, __len); __out.width(0); } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - __out._M_setstate(ios_base::badbit); - if ((__out.exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { __out._M_setstate(ios_base::badbit); } } else if (!__s) __out.setstate(ios_base::badbit); @@ -579,44 +566,39 @@ namespace std operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s) { typedef basic_ostream<_CharT, _Traits> __ostream_type; -#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS -// 167. Improper use of traits_type::length() -// Note that this is only in 'Review' status. + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 167. Improper use of traits_type::length() + // Note that this is only in 'Review' status. typedef char_traits<char> __traits_type; -#endif typename __ostream_type::sentry __cerb(__out); if (__cerb && __s) { size_t __clen = __traits_type::length(__s); - _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1))); + _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __clen)); for (size_t __i = 0; __i < __clen; ++__i) __ws[__i] = __out.widen(__s[__i]); _CharT* __str = __ws; - - try + + try { + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(__clen); - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w)); - if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, + _CharT* __cs = (static_cast< + _CharT*>(__builtin_alloca(sizeof(_CharT) + * __w))); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __ws, __w, __len, false); - __str = __pads; + __str = __cs; __len = __w; } - __out.write(__str, __len); + __out._M_write(__str, __len); __out.width(0); } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - __out._M_setstate(ios_base::badbit); - if ((__out.exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { __out._M_setstate(ios_base::badbit); } } else if (!__s) __out.setstate(ios_base::badbit); @@ -632,30 +614,23 @@ namespace std typename __ostream_type::sentry __cerb(__out); if (__cerb && __s) { - try + try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - char* __pads = static_cast<char*>(__builtin_alloca(__w)); + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(_Traits::length(__s)); - if (__w > __len) { - __pad<char, _Traits>::_S_pad(__out, __out.fill(), __pads, + char* __cs = static_cast<char*>(__builtin_alloca(__w)); + __pad<char, _Traits>::_S_pad(__out, __out.fill(), __cs, __s, __w, __len, false); - __s = __pads; + __s = __cs; __len = __w; } - __out.write(__s, __len); + __out._M_write(__s, __len); __out.width(0); } catch(...) - { - // 27.6.1.2.1 Common requirements. - // Turn this on without causing an ios::failure to be thrown. - __out._M_setstate(ios_base::badbit); - if ((__out.exceptions() & ios_base::badbit) != 0) - __throw_exception_again; - } + { __out._M_setstate(ios_base::badbit); } } else if (!__s) __out.setstate(ios_base::badbit); @@ -667,37 +642,36 @@ namespace std basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __out, const basic_string<_CharT, _Traits, _Alloc>& __str) - { + { typedef basic_ostream<_CharT, _Traits> __ostream_type; typename __ostream_type::sentry __cerb(__out); if (__cerb) { - const _CharT* __s = __str.data(); - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w)); + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(__str.size()); -#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS + const _CharT* __s = __str.data(); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS // 25. String operator<< uses width() value wrong -#endif if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, __s, + _CharT* __cs = (static_cast< + _CharT*>(__builtin_alloca(sizeof(_CharT) * __w))); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __s, __w, __len, false); - __s = __pads; + __s = __cs; __len = __w; } - streamsize __res = __out.rdbuf()->sputn(__s, __len); + __out._M_write(__s, __len); __out.width(0); - if (__res != __len) - __out.setstate(ios_base::failbit); } return __out; } // Inhibit implicit instantiations for required instantiations, - // which are defined via explicit instantiations elsewhere. + // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. -#if _GLIBCPP_EXTERN_TEMPLATE +#if _GLIBCXX_EXTERN_TEMPLATE extern template class basic_ostream<char>; extern template ostream& endl(ostream&); extern template ostream& ends(ostream&); @@ -709,7 +683,7 @@ namespace std extern template ostream& operator<<(ostream&, const unsigned char*); extern template ostream& operator<<(ostream&, const signed char*); -#ifdef _GLIBCPP_USE_WCHAR_T +#ifdef _GLIBCXX_USE_WCHAR_T extern template class basic_ostream<wchar_t>; extern template wostream& endl(wostream&); extern template wostream& ends(wostream&); @@ -721,3 +695,5 @@ namespace std #endif #endif } // namespace std + +#endif |