177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// This header defines classes basic_stringbuf, basic_istringstream,
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// basic_ostringstream, and basic_stringstream.  These classes
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// represent streamsbufs and streams whose sources or destinations are
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// C++ strings.
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_SSTREAM
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_SSTREAM
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_STREAMBUF
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_streambuf.h>
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ISTREAM
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_istream.h> // Includes <ostream>, <ios>, <iosfwd>
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_STRING_H
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_string.h>
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//----------------------------------------------------------------------
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// This version of basic_stringbuf relies on the internal details of
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// basic_string.  It relies on the fact that, in this implementation,
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// basic_string's iterators are pointers.  It also assumes (as allowed
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// by the standard) that _CharT is a POD type.
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// We have a very small buffer for the put area, just so that we don't
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// have to use append() for every sputc.  Conceptually, the buffer
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// immediately follows the end of the underlying string.  We use this
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// buffer when appending to write-only streambufs, but we don't use it
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// for read-write streambufs.
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass basic_stringbuf : public basic_streambuf<_CharT, _Traits> {
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Typedefs.
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _CharT                     char_type;
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::int_type int_type;
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::pos_type pos_type;
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::off_type off_type;
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _Traits                    traits_type;
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_streambuf<_CharT, _Traits>          _Base;
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Self;
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Constructors, destructor.
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit basic_stringbuf(ios_base::openmode __mode
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                      = ios_base::in | ios_base::out);
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit basic_stringbuf(const _String& __s, ios_base::openmode __mode
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                      = ios_base::in | ios_base::out);
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual ~basic_stringbuf();
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Get or set the string.
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _String str() const { return _M_str; }
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void str(const _String& __s);
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:                      // Overridden virtual member functions.
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int_type underflow();
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int_type uflow();
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int_type pbackfail(int_type __c);
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int_type overflow(int_type __c);
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int_type pbackfail() {return pbackfail(_Traits::eof());}
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int_type overflow() {return overflow(_Traits::eof());}
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual streamsize xsputn(const char_type* __s, streamsize __n);
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual streamsize _M_xsputnc(char_type __c, streamsize __n);
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual _Base* setbuf(_CharT* __buf, streamsize __n);
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir,
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           ios_base::openmode __mode
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                      = ios_base::in | ios_base::out);
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                      = ios_base::in | ios_base::out);
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:                        // Helper functions.
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _M_set_ptrs();
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static _CharT* _S_start(const _String& __str) { return __CONST_CAST(_CharT*, __str.data()); }
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static _CharT* _S_finish(const _String& __str) { return __CONST_CAST(_CharT*, __str.data()) + __str.size(); }
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ios_base::openmode _M_mode;
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _String _M_str;
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_TEMPLATE_EXPORT)
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_stringbuf<char, char_traits<char>, allocator<char> >;
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (_STLP_NO_WCHAR_T)
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_stringbuf<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_USE_TEMPLATE_EXPORT */
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//----------------------------------------------------------------------
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class basic_istringstream, an input stream that uses a stringbuf.
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass basic_istringstream : public basic_istream<_CharT, _Traits> {
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Typedefs
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::char_type   char_type;
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::int_type    int_type;
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::pos_type    pos_type;
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::off_type    off_type;
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _Traits traits_type;
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_ios<_CharT, _Traits>                _Basic_ios;
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_istream<_CharT, _Traits>            _Base;
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Constructors, destructor.
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_istringstream(ios_base::openmode __mode = ios_base::in);
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_istringstream(const _String& __str,
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      ios_base::openmode __mode = ios_base::in);
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~basic_istringstream();
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Member functions
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return __CONST_CAST(_Buf*,&_M_buf); }
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _String str() const { return _M_buf.str(); }
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void str(const _String& __s) { _M_buf.str(__s); }
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310)
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_istringstream<_CharT, _Traits> _Self;
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //explicitely defined as private to avoid warnings:
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_istringstream(_Self const&);
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator = (_Self const&);
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//----------------------------------------------------------------------
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class basic_ostringstream, an output stream that uses a stringbuf.
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass basic_ostringstream : public basic_ostream<_CharT, _Traits> {
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Typedefs
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::char_type   char_type;
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::int_type    int_type;
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::pos_type    pos_type;
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::off_type    off_type;
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _Traits traits_type;
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_ios<_CharT, _Traits>                _Basic_ios;
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_ostream<_CharT, _Traits>            _Base;
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Constructors, destructor.
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_ostringstream(ios_base::openmode __mode = ios_base::out);
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_ostringstream(const _String& __str,
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      ios_base::openmode __mode = ios_base::out);
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~basic_ostringstream();
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Member functions.
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return __CONST_CAST(_Buf*,&_M_buf); }
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _String str() const { return _M_buf.str(); }
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    void str(const _String& __s) { _M_buf.str(__s); } // dwa 02/07/00 - BUG STOMPER DAVE
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310)
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_ostringstream<_CharT, _Traits> _Self;
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //explicitely defined as private to avoid warnings:
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_ostringstream(_Self const&);
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator = (_Self const&);
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//----------------------------------------------------------------------
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class basic_stringstream, a bidirectional stream that uses a stringbuf.
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass basic_stringstream : public basic_iostream<_CharT, _Traits> {
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Typedefs
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::char_type char_type;
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::int_type  int_type;
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::pos_type  pos_type;
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::off_type  off_type;
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _Traits  traits_type;
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_ios<_CharT, _Traits>                 _Basic_ios;
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_iostream<_CharT, _Traits>            _Base;
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_string<_CharT, _Traits, _Alloc>      _String;
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef ios_base::openmode openmode;
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Constructors, destructor.
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringstream(openmode __mod = ios_base::in | ios_base::out);
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringstream(const _String& __str,
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     openmode __mod = ios_base::in | ios_base::out);
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~basic_stringstream();
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Member functions.
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return __CONST_CAST(_Buf*,&_M_buf); }
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _String str() const { return _M_buf.str(); }
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    void str(const _String& __s) { _M_buf.str(__s); }
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310)
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_stringstream<_CharT, _Traits> _Self;
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //explicitely defined as private to avoid warnings:
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_stringstream(_Self const&);
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator = (_Self const&);
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_TEMPLATE_EXPORT)
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_istringstream<char, char_traits<char>, allocator<char> >;
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_ostringstream<char, char_traits<char>, allocator<char> >;
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_stringstream<char, char_traits<char>, allocator<char> >;
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (_STLP_NO_WCHAR_T)
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_istringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_ostringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_stringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_USE_TEMPLATE_EXPORT */
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION)
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_sstream.c>
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_SSTREAM */
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
267