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 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_OSTREAM_H 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_OSTREAM_H 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_IOS_H 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ios.h> // For basic_ios<>. Includes <iosfwd>. 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_OSTREAMBUF_ITERATOR_H 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ostreambuf_iterator.h> 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT) && !defined (_STLP_INTERNAL_EXCEPTION) 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_exception.h> 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Osentry; 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool __init_bostr(basic_ostream<_CharT, _Traits>& __str); 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// class basic_ostream<> 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_ostream : virtual public basic_ios<_CharT, _Traits> { 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_ostream<_CharT, _Traits> _Self; 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310) 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //explicitely defined as private to avoid warnings: 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ostream(_Self const&); 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator = (_Self const&); 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Types 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _CharT char_type; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::int_type int_type; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::pos_type pos_type; 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::off_type off_type; 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Traits traits_type; 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_ios<_CharT, _Traits> _Basic_ios; 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Constructor and destructor. 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit basic_ostream(basic_streambuf<_CharT, _Traits>* __buf); 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~basic_ostream(); 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Hooks for manipulators. 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_ios<_CharT, _Traits>& (_STLP_CALL *__ios_fn)(basic_ios<_CharT, _Traits>&); 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ios_base& (_STLP_CALL *__ios_base_fn)(ios_base&); 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Self& (_STLP_CALL *__ostream_fn)(_Self&); 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<< (__ostream_fn __f) { return __f(*this); } 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self & operator<< (__ios_base_fn __f) { __f(*this); return *this; } 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<< (__ios_fn __ff) { __ff(*this); return *this; } 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_copy_buffered(basic_streambuf<_CharT, _Traits>* __from, 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* __to); 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_copy_unbuffered(basic_streambuf<_CharT, _Traits>* __from, 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* __to); 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_put_char(_CharT __c); 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_put_nowiden(const _CharT* __s); 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_put_widen(const char* __s); 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_put_widen_aux(const char* __s, streamsize __n); 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Unformatted output. 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& put(char_type __c); 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& write(const char_type* __s, streamsize __n); 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Formatted output. 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Formatted output from a streambuf. 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(basic_streambuf<_CharT, _Traits>* __buf); 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // this is needed for compiling with option char = unsigned 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(unsigned char __x) { _M_put_char(__x); return *this; } 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(short __x); 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(unsigned short __x); 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(int __x); 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_WIN64) || !defined (_STLP_MSVC) || (_STLP_MSVC < 1300) 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(unsigned int __x); 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* We define this operator with size_t rather than unsigned int to avoid 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 64 bits warning. 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(size_t __x); 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(long __x); 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(unsigned long __x); 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_LONG_LONG 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<< (_STLP_LONG_LONG __x); 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<< (unsigned _STLP_LONG_LONG __x); 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(float __x); 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(double __x); 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_LONG_DOUBLE 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(long double __x); 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(const void* __x); 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_BOOL 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator<<(bool __x); 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Buffer positioning and manipulation. 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& flush() { 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->rdbuf()) 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->rdbuf()->pubsync() == -1) 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::badbit); 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pos_type tellp() { 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->rdbuf() && !this->fail() 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ? this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out) 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : pos_type(-1); 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& seekp(pos_type __pos) { 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->rdbuf() && !this->fail()) { 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1)) { 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->setstate(ios_base::failbit); 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& seekp(off_type __off, ios_base::seekdir __dir) { 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->rdbuf() && !this->fail()) 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->rdbuf()->pubseekoff(__off, __dir, ios_base::out); 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // If we are using DLL specs, we have not to use inner classes 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // end class declaration here 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Osentry<_CharT, _Traits> sentry; 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define sentry _Osentry 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _CharT, class _Traits> 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Osentry { 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Osentry<_CharT, _Traits> _Self; 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class sentry { 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef sentry _Self; 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block private: 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ostream<_CharT, _Traits>& _M_str; 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // basic_streambuf<_CharT, _Traits>* _M_buf; 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_ok; 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public: 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit sentry(basic_ostream<_CharT, _Traits>& __str) 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_str(__str), /* _M_buf(__str.rdbuf()), */ _M_ok(_STLP_PRIV __init_bostr(__str)) 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {} 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~sentry() { 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (_M_str.flags() & ios_base::unitbuf) 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT) 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!uncaught_exception()) 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_str.flush(); 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block operator bool() const { return _M_ok; } 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block private: // Disable assignment and copy constructor. 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Implementation is here only to avoid warning with some compilers. 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry(const _Self& __s) : _M_str(__s._M_str) {} 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self&) { return *this; } 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block }; 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef sentry 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // close basic_ostream class definition here 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_ostream<char, char_traits<char> >; 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Osentry<char, char_traits<char> >; 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_WCHAR_T) 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_ostream<wchar_t, char_traits<wchar_t> >; 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Osentry<wchar_t, char_traits<wchar_t> >; 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_TEMPLATE_EXPORT */ 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Helper functions for istream<>::sentry constructor. 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool __init_bostr(basic_ostream<_CharT, _Traits>& __str) { 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__str.good()) { 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // boris : check if this is needed ! 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__str.rdbuf()) 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __str.setstate(ios_base::badbit); 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__str.tie()) 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __str.tie()->flush(); 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __str.good(); 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_streambuf<_CharT, _Traits>* _STLP_CALL 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__get_ostreambuf(basic_ostream<_CharT, _Traits>& __St) 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __St.rdbuf(); } 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Non-member functions. 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c){ 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __s) { 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__s); 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER) 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// some specializations 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, char_traits<char> >& _STLP_CALL 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __os, char __c) { 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, char_traits<char> >& _STLP_CALL 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __os, signed char __c) { 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, char_traits<char> >& _STLP_CALL 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __os, unsigned char __c) { 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, char_traits<char> >& _STLP_CALL 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __os, const char* __s) { 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__s); 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, char_traits<char> >& _STLP_CALL 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __os, const signed char* __s) { 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__REINTERPRET_CAST(const char*,__s)); 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, char_traits<char> >& 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __os, const unsigned char* __s) { 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__REINTERPRET_CAST(const char*,__s)); 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// also for compilers who might use that 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, char __c) { 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__os.widen(__c)); 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, _Traits>& _STLP_CALL 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, _Traits>& __os, char __c) { 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, _Traits>& _STLP_CALL 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, _Traits>& __os, signed char __c) { 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, _Traits>& _STLP_CALL 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c) { 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_char(__c); 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __s) { 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_widen(__s); 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, _Traits>& _STLP_CALL 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, _Traits>& __os, const char* __s) { 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__s); 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, _Traits>& _STLP_CALL 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, _Traits>& __os, const signed char* __s) { 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__REINTERPRET_CAST(const char*,__s)); 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<char, _Traits>& 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __s) { 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os._M_put_nowiden(__REINTERPRET_CAST(const char*,__s)); 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER */ 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// basic_ostream manipulators. 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockendl(basic_ostream<_CharT, _Traits>& __os) { 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.put(__os.widen('\n')); 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.flush(); 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockends(basic_ostream<_CharT, _Traits>& __os) { 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.put(_STLP_DEFAULT_CONSTRUCTED(_CharT)); 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockflush(basic_ostream<_CharT, _Traits>& __os) { 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.flush(); 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION) 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ostream.c> 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_OSTREAM_H */ 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 388