ostream.tcc
来自「ARM Linux Tool 各种代码包括MTD」· TCC 代码 · 共 756 行 · 第 1/2 页
TCC
756 行
// Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library. This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING. If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction. Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License. This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License.//// ISO C++ 14882: 27.6.2 Output streams//#include <bits/std_locale.h>namespace std { template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>::sentry:: sentry(basic_ostream<_CharT,_Traits>& __os) : _M_ok(__os.good()), _M_os(__os) { // XXX MT if (_M_ok && __os.tie()) __os.tie()->flush(); } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: operator<<(__ostream_type& (*__pf)(__ostream_type&)) { sentry __cerb(*this); if (__cerb) { try { __pf(*this); } catch(exception& __fail) { // 27.6.2.5.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: operator<<(__ios_type& (*__pf)(__ios_type&)) { sentry __cerb(*this); if (__cerb) { try { __pf(*this); } catch(exception& __fail) { // 27.6.2.5.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: operator<<(ios_base& (*__pf)(ios_base&)) { sentry __cerb(*this); if (__cerb) { try { __pf(*this); } catch(exception& __fail) { // 27.6.2.5.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(bool __n) { sentry __cerb(*this); if (__cerb) { try { if (_M_check_facet(_M_fnumput)) if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) this->setstate(ios_base::badbit); } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(long __n) { sentry __cerb(*this); if (__cerb) { 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); } } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(unsigned long __n) { sentry __cerb(*this); if (__cerb) { try { if (_M_check_facet(_M_fnumput)) if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) this->setstate(ios_base::badbit); } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; }#ifdef _GLIBCPP_USE_LONG_LONG template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(long long __n) { sentry __cerb(*this); if (__cerb) { 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); } } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n) { sentry __cerb(*this); if (__cerb) { try { if (_M_check_facet(_M_fnumput)) if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) this->setstate(ios_base::badbit); } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; }#endif template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(double __n) { sentry __cerb(*this); if (__cerb) { try { if (_M_check_facet(_M_fnumput)) if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) this->setstate(ios_base::badbit); } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(long double __n) { sentry __cerb(*this); if (__cerb) { try { if (_M_check_facet(_M_fnumput)) if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) this->setstate(ios_base::badbit); } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(const void* __n) { sentry __cerb(*this); if (__cerb) { try { if (_M_check_facet(_M_fnumput)) if (_M_fnumput->put(*this, *this, this->fill(), __n).failed()) this->setstate(ios_base::badbit); } catch(exception& __fail) { // 27.6.1.2.1 Common requirements. // Turn this on without causing an ios::failure to be thrown. this->setstate(ios_base::badbit); if ((this->exceptions() & ios_base::badbit) != 0) __throw_exception_again; } } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sbin) { streamsize __xtrct = 0; __streambuf_type* __sbout = this->rdbuf(); sentry __cerb(*this); if (__sbin && __cerb) __xtrct = __copy_streambufs(*this, __sbin, __sbout); if (!__sbin || !__xtrct) this->setstate(ios_base::failbit); return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::put(char_type __c) { sentry __cerb(*this); if (__cerb) { int_type __put = rdbuf()->sputc(__c); if (__put != traits_type::to_int_type(__c)) this->setstate(ios_base::badbit); } return *this; } template<typename _CharT, typename _Traits> basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::write(const _CharT* __s, streamsize __n) { sentry __cerb(*this); if (__cerb) { streamsize __put = this->rdbuf()->sputn(__s, __n); if ( __put != __n) this->setstate(ios_base::badbit); } return *this;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?