19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 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#ifndef _STLP_OSTREAM_C 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_OSTREAM_C 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_OSTREAM_H 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ostream.h> 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_INTERNAL_NUM_PUT_H) 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_num_put.h> // For basic_streambuf and iterators 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Definitions of non-inline member functions. 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Constructor, destructor 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>::basic_ostream(basic_streambuf<_CharT, _Traits>* __buf) 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : basic_ios<_CharT, _Traits>() { 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->init(__buf); 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>::~basic_ostream() 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{} 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Output directly from a streambuf. 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<_CharT, _Traits>* __from) { 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry __sentry(*this); 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__from) { 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __any_inserted = __from->gptr() != __from->egptr() 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ? this->_M_copy_buffered(__from, this->rdbuf()) 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : this->_M_copy_unbuffered(__from, this->rdbuf()); 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__any_inserted) 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::failbit); 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::badbit); 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Helper functions for the streambuf version of operator<<. The 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// exception-handling code is complicated because exceptions thrown 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// while extracting characters are treated differently than exceptions 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// thrown while inserting characters. 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool basic_ostream<_CharT, _Traits> 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ::_M_copy_buffered(basic_streambuf<_CharT, _Traits>* __from, 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* __to) { 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __any_inserted = false; 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__from->egptr() != __from->gptr()) { 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const ptrdiff_t __avail = __from->egptr() - __from->gptr(); 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __nwritten; 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __nwritten = __to->sputn(__from->gptr(), __avail); 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __from->gbump((int)__nwritten); 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __any_inserted; 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__nwritten == __avail) { 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_S_eof(__from->sgetc())) 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return true; 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __any_inserted = true; 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::failbit); 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (__nwritten != 0) 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return true; 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __any_inserted; 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // No characters are in the buffer, but we aren't at EOF. Switch to 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // unbuffered mode. 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __any_inserted || this->_M_copy_unbuffered(__from, __to); 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Helper struct (guard) to put back a character in a streambuf 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * whenever an exception or an eof occur. 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _SPutBackC { 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_streambuf<_CharT, _Traits> _StreamBuf; 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _StreamBuf::int_type int_type; 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _SPutBackC(_StreamBuf *pfrom) 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : __pfrom(pfrom), __c(0), __do_guard(false) {} 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~_SPutBackC() { 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__do_guard) { 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pfrom->sputbackc(_Traits::to_char_type(__c)); 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void guard(int_type c) { 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __c = c; 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __do_guard = true; 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void release() { 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __do_guard = false; 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StreamBuf *__pfrom; 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int_type __c; 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __do_guard; 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool basic_ostream<_CharT, _Traits> 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ::_M_copy_unbuffered(basic_streambuf<_CharT, _Traits>* __from, 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* __to) { 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _SPutBackC<_CharT, _Traits> _SPutBackCGuard; 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __any_inserted = false; 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int_type __c; 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _SPutBackCGuard __cguard(__from); 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (;;) { 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __c = __from->sbumpc(); 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::failbit); 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (this->_S_eof(__c)) 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __cguard.guard(__c); 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TRY { 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (this->_S_eof(__to->sputc(_Traits::to_char_type(__c)))) 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_CATCH_ALL { 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_handle_exception(ios_base::badbit); 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __cguard.release(); 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __any_inserted = true; 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __any_inserted; 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Helper function for numeric output. 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Number> 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& _STLP_CALL 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__put_num(basic_ostream<_CharT, _Traits>& __os, _Number __x) { 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename basic_ostream<_CharT, _Traits>::sentry _Sentry; 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Sentry __sentry(__os); 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __failed = true; 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > _NumPut; 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = (use_facet<_NumPut>(__os.getloc())).put(ostreambuf_iterator<_CharT, _Traits>(__os.rdbuf()), 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os, __os.fill(), 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x).failed(); 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_handle_exception(ios_base::badbit); 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__failed) 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.setstate(ios_base::badbit); 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * In the following operators we try to limit code bloat by limiting the 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * number of __put_num instanciations. 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(short __x) { 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STATIC_ASSERT( sizeof(short) <= sizeof(long) ) 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long __tmp = ((this->flags() & _Basic_ios::basefield) != ios_base::dec) ? 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __STATIC_CAST(long, __STATIC_CAST(unsigned short, __x)): __x; 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __put_num(*this, __tmp); 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(unsigned short __x) { 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STATIC_ASSERT( sizeof(unsigned short) <= sizeof(unsigned long) ) 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __put_num(*this, __STATIC_CAST(unsigned long,__x)); 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(int __x) { 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STATIC_ASSERT( sizeof(int) <= sizeof(long) ) 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long __tmp = ((this->flags() & _Basic_ios::basefield) != ios_base::dec) ? 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __STATIC_CAST(long, __STATIC_CAST(unsigned int, __x)): __x; 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __put_num(*this, __tmp); 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_WIN64) || !defined (_STLP_MSVC) || (_STLP_MSVC < 1300) 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(unsigned int __x) { 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STATIC_ASSERT( sizeof(unsigned int) <= sizeof(unsigned long) ) 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* We define this operator with size_t rather than unsigned int to avoid 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 64 bits warning. 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(size_t __x) { 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STATIC_ASSERT( sizeof(size_t) <= sizeof(unsigned long) ) 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __put_num(*this, __STATIC_CAST(unsigned long,__x)); 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(long __x) 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(unsigned long __x) 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_LONG_LONG 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<< (_STLP_LONG_LONG __x) 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<< (unsigned _STLP_LONG_LONG __x) 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(float __x) 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __STATIC_CAST(double,__x)); } 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(double __x) 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NO_LONG_DOUBLE 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(long double __x) 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(const void* __x) 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NO_BOOL 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(bool __x) 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __put_num(*this, __x); } 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid basic_ostream<_CharT, _Traits>::_M_put_char(_CharT __c) { 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry __sentry(*this); 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __failed = true; 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __npad = this->width() > 0 ? this->width() - 1 : 0; 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // if (__npad <= 1) 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__npad == 0) 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->_S_eof(this->rdbuf()->sputc(__c)); 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if ((this->flags() & ios_base::adjustfield) == ios_base::left) { 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->_S_eof(this->rdbuf()->sputc(__c)); 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = __failed || 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->rdbuf()->_M_sputnc(this->fill(), __npad) != __npad; 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->rdbuf()->_M_sputnc(this->fill(), __npad) != __npad; 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = __failed || this->_S_eof(this->rdbuf()->sputc(__c)); 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->width(0); 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__failed) 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::badbit); 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid basic_ostream<_CharT, _Traits>::_M_put_nowiden(const _CharT* __s) { 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry __sentry(*this); 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __failed = true; 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __n = _Traits::length(__s); 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __npad = this->width() > __n ? this->width() - __n : 0; 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__npad == 0) 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->rdbuf()->sputn(__s, __n) != __n; 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if ((this->flags() & ios_base::adjustfield) == ios_base::left) { 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->rdbuf()->sputn(__s, __n) != __n; 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = __failed || 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->rdbuf()->_M_sputnc(this->fill(), __npad) != __npad; 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->rdbuf()->_M_sputnc(this->fill(), __npad) != __npad; 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = __failed || this->rdbuf()->sputn(__s, __n) != __n; 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->width(0); 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__failed) 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::failbit); 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid basic_ostream<_CharT, _Traits>::_M_put_widen(const char* __s) { 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry __sentry(*this); 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __failed = true; 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __n = char_traits<char>::length(__s); 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __npad = this->width() > __n ? this->width() - __n : 0; 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__npad == 0) 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = !this->_M_put_widen_aux(__s, __n); 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if ((this->flags() & ios_base::adjustfield) == ios_base::left) { 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = !this->_M_put_widen_aux(__s, __n); 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = __failed || 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->rdbuf()->_M_sputnc(this->fill(), __npad) != __npad; 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->rdbuf()->_M_sputnc(this->fill(), __npad) != __npad; 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = __failed || !this->_M_put_widen_aux(__s, __n); 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->width(0); 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__failed) 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::failbit); 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool basic_ostream<_CharT, _Traits>::_M_put_widen_aux(const char* __s, 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize __n) { 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* __buf = this->rdbuf(); 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __n > 0 ; --__n) 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_S_eof(__buf->sputc(this->widen(*__s++)))) 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return true; 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Unformatted output of a single character. 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>::put(char_type __c) { 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry __sentry(*this); 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __failed = true; 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->_S_eof(this->rdbuf()->sputc(__c)); 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__failed) 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::badbit); 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Unformatted output of a single character. 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n) { 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry __sentry(*this); 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __failed = true; 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) { 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __failed = this->rdbuf()->sputn(__s, __n) != __n; 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_CATCH_ALL { 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_handle_exception(ios_base::badbit); 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__failed) 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::badbit); 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_OSTREAM_C */ 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 456