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