📄 ostream
字号:
streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
_TRY_IO_BEGIN
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
if (_State == ios_base::goodbit
&& _Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ctype_fac.widen(_Ch))))
_State |= ios_base::badbit;
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
_CATCH_IO_(_Ostr)
}
_Ostr.width(0);
_Ostr.setstate(_State);
return (_Ostr);
}
template<class _Traits> inline
basic_ostream<char, _Traits>& operator<<(
basic_ostream<char, _Traits>& _Ostr,
const char *_Val)
{ // insert NTBS into char stream
typedef char _Elem;
typedef basic_ostream<_Elem, _Traits> _Myos;
ios_base::iostate _State = ios_base::goodbit;
streamsize _Count = (streamsize)_Traits::length(_Val); // may overflow
streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
? 0 : _Ostr.width() - _Count;
const typename _Myos::sentry _Ok(_Ostr);
if (!_Ok)
_State |= ios_base::badbit;
else
{ // state okay, insert
_TRY_IO_BEGIN
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; 0 < _Pad; --_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
if (_State == ios_base::goodbit
&& _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)
_State |= ios_base::badbit;
if (_State == ios_base::goodbit)
for (; 0 < _Pad; --_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
_Ostr.width(0);
_CATCH_IO_(_Ostr)
}
_Ostr.setstate(_State);
return (_Ostr);
}
template<class _Traits> inline
basic_ostream<char, _Traits>& operator<<(
basic_ostream<char, _Traits>& _Ostr, char _Ch)
{ // insert a char into char stream
typedef char _Elem;
typedef basic_ostream<_Elem, _Traits> _Myos;
ios_base::iostate _State = ios_base::goodbit;
const typename _Myos::sentry _Ok(_Ostr);
if (_Ok)
{ // state okay, insert
streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
_TRY_IO_BEGIN
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
if (_State == ios_base::goodbit
&& _Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ch)))
_State |= ios_base::badbit;
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
_CATCH_IO_(_Ostr)
}
_Ostr.width(0);
_Ostr.setstate(_State);
return (_Ostr);
}
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>& operator<<(
basic_ostream<_Elem, _Traits>& _Ostr, const _Elem *_Val)
{ // insert NTCS
typedef basic_ostream<_Elem, _Traits> _Myos;
ios_base::iostate _State = ios_base::goodbit;
streamsize _Count = (streamsize)_Traits::length(_Val); // may overflow
streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
? 0 : _Ostr.width() - _Count;
const typename _Myos::sentry _Ok(_Ostr);
if (!_Ok)
_State |= ios_base::badbit;
else
{ // state okay, insert
_TRY_IO_BEGIN
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; 0 < _Pad; --_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
if (_State == ios_base::goodbit
&& _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)
_State |= ios_base::badbit;
if (_State == ios_base::goodbit)
for (; 0 < _Pad; --_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
_Ostr.width(0);
_CATCH_IO_(_Ostr)
}
_Ostr.setstate(_State);
return (_Ostr);
}
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>& operator<<(
basic_ostream<_Elem, _Traits>& _Ostr, _Elem _Ch)
{ // insert a character
typedef basic_ostream<_Elem, _Traits> _Myos;
ios_base::iostate _State = ios_base::goodbit;
const typename _Myos::sentry _Ok(_Ostr);
if (_Ok)
{ // state okay, insert
streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
_TRY_IO_BEGIN
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
if (_State == ios_base::goodbit
&& _Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ch)))
_State |= ios_base::badbit;
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
_CATCH_IO_(_Ostr)
}
_Ostr.width(0);
_Ostr.setstate(_State);
return (_Ostr);
}
template<class _Traits> inline
basic_ostream<char, _Traits>& operator<<(
basic_ostream<char, _Traits>& _Ostr, const signed char *_Val)
{ // insert a signed char NTBS
return (_Ostr << (const char *)_Val);
}
template<class _Traits> inline
basic_ostream<char, _Traits>& operator<<(
basic_ostream<char, _Traits>& _Ostr, signed char _Ch)
{ // insert a signed char
return (_Ostr << (char)_Ch);
}
template<class _Traits> inline
basic_ostream<char, _Traits>& operator<<(
basic_ostream<char, _Traits>& _Ostr, const unsigned char *_Val)
{ // insert an unsigned char NTBS
return (_Ostr << (const char *)_Val);
}
template<class _Traits> inline
basic_ostream<char, _Traits>& operator<<(
basic_ostream<char, _Traits>& _Ostr, unsigned char _Ch)
{ // insert an unsigned char
return (_Ostr << (char)_Ch);
}
template<class _Elem,
class _Traits,
class _Ty> inline
basic_ostream<_Elem, _Traits>&
operator<<(basic_ostream<_Elem, _Traits>&& _Ostr, _Ty _Val)
{ // insert to rvalue stream
return (_Ostr << _Val);
}
// MANIPULATORS
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>&
__CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr)
{ // insert newline and flush stream
_Ostr.put(_Ostr.widen('\n'));
_Ostr.flush();
return (_Ostr);
}
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>&
__CLRCALL_OR_CDECL ends(basic_ostream<_Elem, _Traits>& _Ostr)
{ // insert null character
_Ostr.put(_Elem());
return (_Ostr);
}
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>&
__CLRCALL_OR_CDECL flush(basic_ostream<_Elem, _Traits>& _Ostr)
{ // flush stream
_Ostr.flush();
return (_Ostr);
}
_CRTIMP2_PURE inline basic_ostream<char, char_traits<char> >&
__CLRCALL_OR_CDECL endl(basic_ostream<char, char_traits<char> >& _Ostr)
{ // insert newline and flush byte stream
_Ostr.put('\n');
_Ostr.flush();
return (_Ostr);
}
_CRTIMP2_PURE inline basic_ostream<wchar_t, char_traits<wchar_t> >&
__CLRCALL_OR_CDECL endl(basic_ostream<wchar_t,
char_traits<wchar_t> >& _Ostr)
{ // insert newline and flush wide stream
_Ostr.put('\n');
_Ostr.flush();
return (_Ostr);
}
#ifdef _NATIVE_WCHAR_T_DEFINED
_CRTIMP2_PURE inline basic_ostream<unsigned short, char_traits<unsigned short> >&
__CLRCALL_OR_CDECL endl(basic_ostream<unsigned short,
char_traits<unsigned short> >& _Ostr)
{ // insert newline and flush wide stream
_Ostr.put('\n');
_Ostr.flush();
return (_Ostr);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
_CRTIMP2_PURE inline basic_ostream<char, char_traits<char> >&
__CLRCALL_OR_CDECL ends(basic_ostream<char, char_traits<char> >& _Ostr)
{ // insert null character into byte stream
_Ostr.put('\0');
return (_Ostr);
}
_CRTIMP2_PURE inline basic_ostream<wchar_t, char_traits<wchar_t> >&
__CLRCALL_OR_CDECL ends(basic_ostream<wchar_t,
char_traits<wchar_t> >& _Ostr)
{ // insert null character into wide stream
_Ostr.put('\0');
return (_Ostr);
}
#ifdef _NATIVE_WCHAR_T_DEFINED
_CRTIMP2_PURE inline basic_ostream<unsigned short, char_traits<unsigned short> >&
__CLRCALL_OR_CDECL ends(basic_ostream<unsigned short,
char_traits<unsigned short> >& _Ostr)
{ // insert null character into wide stream
_Ostr.put('\0');
return (_Ostr);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
_CRTIMP2_PURE inline basic_ostream<char, char_traits<char> >&
__CLRCALL_OR_CDECL flush(basic_ostream<char, char_traits<char> >& _Ostr)
{ // flush byte stream
_Ostr.flush();
return (_Ostr);
}
_CRTIMP2_PURE inline basic_ostream<wchar_t, char_traits<wchar_t> >&
__CLRCALL_OR_CDECL flush(basic_ostream<wchar_t,
char_traits<wchar_t> >& _Ostr)
{ // flush wide stream
_Ostr.flush();
return (_Ostr);
}
#ifdef _NATIVE_WCHAR_T_DEFINED
_CRTIMP2_PURE inline basic_ostream<unsigned short, char_traits<unsigned short> >&
__CLRCALL_OR_CDECL flush(basic_ostream<unsigned short,
char_traits<unsigned short> >& _Ostr)
{ // flush wide stream
_Ostr.flush();
return (_Ostr);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
#if _HAS_CPP0X
// INSERTER FOR error_category
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>&
operator<<(basic_ostream<_Elem, _Traits>& _Ostr,
const error_code& _Errcode)
{ // display error code
return (_Ostr << _Errcode.category().name() << ':' << _Errcode.value());
}
#endif /* _HAS_CPP0X */
_STD_END
#pragma warning(pop)
#pragma pack(pop)
#endif /* RC_INVOKED */
#endif /* _OSTREAM_ */
/*
* Copyright (c) 1992-2009 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V5.20:0009 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -