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// This header defines classes basic_stringbuf, basic_istringstream,
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// basic_ostringstream, and basic_stringstream.  These classes
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// represent streamsbufs and streams whose sources or destinations are
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// C++ strings.
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_SSTREAM
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_SSTREAM
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STREAMBUF
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_streambuf.h>
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ISTREAM
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_istream.h> // Includes <ostream>, <ios>, <iosfwd>
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STRING_H
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_string.h>
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//----------------------------------------------------------------------
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This version of basic_stringbuf relies on the internal details of
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// basic_string.  It relies on the fact that, in this implementation,
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// basic_string's iterators are pointers.  It also assumes (as allowed
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// by the standard) that _CharT is a POD type.
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// We have a very small buffer for the put area, just so that we don't
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// have to use append() for every sputc.  Conceptually, the buffer
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// immediately follows the end of the underlying string.  We use this
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// buffer when appending to write-only streambufs, but we don't use it
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// for read-write streambufs.
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_stringbuf : public basic_streambuf<_CharT, _Traits> {
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Typedefs.
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _CharT                     char_type;
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::int_type int_type;
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::pos_type pos_type;
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::off_type off_type;
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Traits                    traits_type;
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_streambuf<_CharT, _Traits>          _Base;
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Self;
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Constructors, destructor.
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit basic_stringbuf(ios_base::openmode __mode
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                      = ios_base::in | ios_base::out);
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit basic_stringbuf(const _String& __s, ios_base::openmode __mode
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                      = ios_base::in | ios_base::out);
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual ~basic_stringbuf();
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Get or set the string.
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _String str() const { return _M_str; }
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void str(const _String& __s);
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:                      // Overridden virtual member functions.
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual int_type underflow();
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual int_type uflow();
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual int_type pbackfail(int_type __c);
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual int_type overflow(int_type __c);
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int_type pbackfail() {return pbackfail(_Traits::eof());}
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int_type overflow() {return overflow(_Traits::eof());}
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual streamsize xsputn(const char_type* __s, streamsize __n);
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual streamsize _M_xsputnc(char_type __c, streamsize __n);
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual _Base* setbuf(_CharT* __buf, streamsize __n);
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir,
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                           ios_base::openmode __mode
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                      = ios_base::in | ios_base::out);
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                      = ios_base::in | ios_base::out);
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:                        // Helper functions.
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void _M_set_ptrs();
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _CharT* _S_start(const _String& __str) { return __CONST_CAST(_CharT*, __str.data()); }
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _CharT* _S_finish(const _String& __str) { return __CONST_CAST(_CharT*, __str.data()) + __str.size(); }
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ios_base::openmode _M_mode;
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _String _M_str;
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT)
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_stringbuf<char, char_traits<char>, allocator<char> >;
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_NO_WCHAR_T)
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_stringbuf<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_TEMPLATE_EXPORT */
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//----------------------------------------------------------------------
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class basic_istringstream, an input stream that uses a stringbuf.
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_istringstream : public basic_istream<_CharT, _Traits> {
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Typedefs
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::char_type   char_type;
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::int_type    int_type;
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::pos_type    pos_type;
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::off_type    off_type;
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Traits traits_type;
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_ios<_CharT, _Traits>                _Basic_ios;
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_istream<_CharT, _Traits>            _Base;
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Constructors, destructor.
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_istringstream(ios_base::openmode __mode = ios_base::in);
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_istringstream(const _String& __str,
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      ios_base::openmode __mode = ios_base::in);
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~basic_istringstream();
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Member functions
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return __CONST_CAST(_Buf*,&_M_buf); }
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _String str() const { return _M_buf.str(); }
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void str(const _String& __s) { _M_buf.str(__s); }
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310)
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_istringstream<_CharT, _Traits> _Self;
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //explicitely defined as private to avoid warnings:
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_istringstream(_Self const&);
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator = (_Self const&);
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//----------------------------------------------------------------------
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class basic_ostringstream, an output stream that uses a stringbuf.
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_ostringstream : public basic_ostream<_CharT, _Traits> {
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Typedefs
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::char_type   char_type;
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::int_type    int_type;
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::pos_type    pos_type;
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::off_type    off_type;
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Traits traits_type;
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_ios<_CharT, _Traits>                _Basic_ios;
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_ostream<_CharT, _Traits>            _Base;
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Constructors, destructor.
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_ostringstream(ios_base::openmode __mode = ios_base::out);
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_ostringstream(const _String& __str,
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      ios_base::openmode __mode = ios_base::out);
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~basic_ostringstream();
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Member functions.
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return __CONST_CAST(_Buf*,&_M_buf); }
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _String str() const { return _M_buf.str(); }
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void str(const _String& __s) { _M_buf.str(__s); } // dwa 02/07/00 - BUG STOMPER DAVE
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310)
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_ostringstream<_CharT, _Traits> _Self;
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //explicitely defined as private to avoid warnings:
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_ostringstream(_Self const&);
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator = (_Self const&);
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//----------------------------------------------------------------------
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class basic_stringstream, a bidirectional stream that uses a stringbuf.
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_stringstream : public basic_iostream<_CharT, _Traits> {
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Typedefs
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::char_type char_type;
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::int_type  int_type;
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::pos_type  pos_type;
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::off_type  off_type;
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Traits  traits_type;
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_ios<_CharT, _Traits>                 _Basic_ios;
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_iostream<_CharT, _Traits>            _Base;
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_string<_CharT, _Traits, _Alloc>      _String;
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef ios_base::openmode openmode;
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Constructors, destructor.
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringstream(openmode __mod = ios_base::in | ios_base::out);
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringstream(const _String& __str,
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                     openmode __mod = ios_base::in | ios_base::out);
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~basic_stringstream();
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Member functions.
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return __CONST_CAST(_Buf*,&_M_buf); }
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _String str() const { return _M_buf.str(); }
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void str(const _String& __s) { _M_buf.str(__s); }
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310)
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_stringstream<_CharT, _Traits> _Self;
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //explicitely defined as private to avoid warnings:
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_stringstream(_Self const&);
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator = (_Self const&);
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT)
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_istringstream<char, char_traits<char>, allocator<char> >;
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_ostringstream<char, char_traits<char>, allocator<char> >;
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_stringstream<char, char_traits<char>, allocator<char> >;
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_NO_WCHAR_T)
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_istringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_ostringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_stringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_TEMPLATE_EXPORT */
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION)
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_sstream.c>
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_SSTREAM */
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
267