epoc32/include/stdapis/stlport/stl/_sstream.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
 * © Portions copyright (c) 2006-2007 Nokia Corporation.  All rights reserved.
williamr@4
     3
 * Copyright (c) 1999
williamr@4
     4
 * Silicon Graphics Computer Systems, Inc.
williamr@4
     5
 *
williamr@4
     6
 * Copyright (c) 1999 
williamr@4
     7
 * Boris Fomitchev
williamr@4
     8
 *
williamr@4
     9
 * This material is provided "as is", with absolutely no warranty expressed
williamr@4
    10
 * or implied. Any use is at your own risk.
williamr@4
    11
 *
williamr@4
    12
 * Permission to use or copy this software for any purpose is hereby granted 
williamr@4
    13
 * without fee, provided the above notices are retained on all copies.
williamr@4
    14
 * Permission to modify the code and to distribute modified code is granted,
williamr@4
    15
 * provided the above notices are retained, and a notice that the code was
williamr@4
    16
 * modified is included with the above copyright notice.
williamr@4
    17
 *
williamr@4
    18
 */ 
williamr@4
    19
williamr@4
    20
williamr@4
    21
// This header defines classes basic_stringbuf, basic_istringstream,
williamr@4
    22
// basic_ostringstream, and basic_stringstream.  These classes 
williamr@4
    23
// represent streamsbufs and streams whose sources or destinations are
williamr@4
    24
// C++ strings.
williamr@4
    25
williamr@4
    26
#ifndef _STLP_SSTREAM_H
williamr@4
    27
#define _STLP_SSTREAM_H
williamr@4
    28
williamr@4
    29
#ifndef _STLP_INTERNAL_STREAMBUF
williamr@4
    30
# include <stl/_streambuf.h>
williamr@4
    31
#endif
williamr@4
    32
williamr@4
    33
#ifndef _STLP_INTERNAL_ISTREAM_H
williamr@4
    34
# include <stl/_istream.h> // Includes <ostream>, <ios>, <iosfwd>
williamr@4
    35
#endif
williamr@4
    36
williamr@4
    37
#ifndef _STLP_STRING_H
williamr@4
    38
# include <stl/_string.h>
williamr@4
    39
#endif
williamr@4
    40
williamr@4
    41
_STLP_BEGIN_NAMESPACE
williamr@4
    42
williamr@4
    43
//----------------------------------------------------------------------
williamr@4
    44
// This version of basic_stringbuf relies on the internal details of
williamr@4
    45
// basic_string.  It relies on the fact that, in this implementation,
williamr@4
    46
// basic_string's iterators are pointers.  It also assumes (as allowed
williamr@4
    47
// by the standard) that _CharT is a POD type.
williamr@4
    48
williamr@4
    49
// We have a very small buffer for the put area, just so that we don't
williamr@4
    50
// have to use append() for every sputc.  Conceptually, the buffer
williamr@4
    51
// immediately follows the end of the underlying string.  We use this
williamr@4
    52
// buffer when appending to write-only streambufs, but we don't use it
williamr@4
    53
// for read-write streambufs.
williamr@4
    54
williamr@4
    55
template <class _CharT, class _Traits, class _Alloc>
williamr@4
    56
#ifdef __SYMBIAN32__
williamr@4
    57
NONSHARABLE_CLASS ( basic_stringbuf ) : public basic_streambuf<_CharT, _Traits>
williamr@4
    58
#else
williamr@4
    59
class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
williamr@4
    60
#endif
williamr@4
    61
{
williamr@4
    62
public:                         // Typedefs.
williamr@4
    63
  typedef _CharT                     char_type;
williamr@4
    64
  typedef typename _Traits::int_type int_type;
williamr@4
    65
  typedef typename _Traits::pos_type pos_type;
williamr@4
    66
  typedef typename _Traits::off_type off_type;
williamr@4
    67
  typedef _Traits                    traits_type;
williamr@4
    68
williamr@4
    69
  typedef basic_streambuf<_CharT, _Traits>          _Base;
williamr@4
    70
  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Self;
williamr@4
    71
  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
williamr@4
    72
williamr@4
    73
public:                         // Constructors, destructor.
williamr@4
    74
  _STLP_DECLSPEC explicit basic_stringbuf(ios_base::openmode __mode
williamr@4
    75
                                      = ios_base::in | ios_base::out);
williamr@4
    76
  _STLP_DECLSPEC explicit basic_stringbuf(const _String& __s, ios_base::openmode __mode
williamr@4
    77
                                      = ios_base::in | ios_base::out);
williamr@4
    78
  _STLP_DECLSPEC virtual ~basic_stringbuf();
williamr@4
    79
williamr@4
    80
public:                         // Get or set the string.
williamr@4
    81
  _String str() const { 
williamr@4
    82
      if ( _M_mode & ios_base::out )
williamr@4
    83
           _M_append_buffer();
williamr@4
    84
      return _M_str; 
williamr@4
    85
   }
williamr@4
    86
  _STLP_DECLSPEC void str(const _String& __s);
williamr@4
    87
williamr@4
    88
protected:                      // Overridden virtual member functions.
williamr@4
    89
  virtual int_type underflow();
williamr@4
    90
  virtual int_type uflow();
williamr@4
    91
  virtual int_type pbackfail(int_type __c);
williamr@4
    92
  virtual int_type overflow(int_type __c);
williamr@4
    93
  int_type pbackfail() {return pbackfail(_Traits::eof());}
williamr@4
    94
  int_type overflow() {return overflow(_Traits::eof());}
williamr@4
    95
williamr@4
    96
  virtual streamsize xsputn(const char_type* __s, streamsize __n);
williamr@4
    97
  virtual streamsize _M_xsputnc(char_type __c, streamsize __n);
williamr@4
    98
williamr@4
    99
  virtual _Base* setbuf(_CharT* __buf, streamsize __n);
williamr@4
   100
  virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir,
williamr@4
   101
                           ios_base::openmode __mode 
williamr@4
   102
                                      = ios_base::in | ios_base::out);
williamr@4
   103
  virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode 
williamr@4
   104
                                      = ios_base::in | ios_base::out);
williamr@4
   105
  ios_base::openmode _M_mode;
williamr@4
   106
williamr@4
   107
private:                        // Helper functions.
williamr@4
   108
  // Append the internal buffer to the string if necessary.
williamr@4
   109
  void _M_append_buffer() const;
williamr@4
   110
  void _M_set_ptrs();
williamr@4
   111
williamr@4
   112
private:
williamr@4
   113
  mutable basic_string<_CharT, _Traits, _Alloc> _M_str;
williamr@4
   114
williamr@4
   115
  enum _JustName { _S_BufSiz = 8 };
williamr@4
   116
  _CharT _M_Buf[ 8 /* _S_BufSiz */];
williamr@4
   117
};
williamr@4
   118
williamr@4
   119
# if defined (_STLP_USE_TEMPLATE_EXPORT)
williamr@4
   120
_STLP_EXPORT_TEMPLATE_CLASS basic_stringbuf<char, char_traits<char>, allocator<char> >;
williamr@4
   121
#  if !defined (_STLP_NO_WCHAR_T)
williamr@4
   122
_STLP_EXPORT_TEMPLATE_CLASS basic_stringbuf<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
williamr@4
   123
#  endif
williamr@4
   124
# endif /* _STLP_USE_TEMPLATE_EXPORT */
williamr@4
   125
williamr@4
   126
//----------------------------------------------------------------------
williamr@4
   127
// Class basic_istringstream, an input stream that uses a stringbuf.
williamr@4
   128
williamr@4
   129
template <class _CharT, class _Traits, class _Alloc>
williamr@4
   130
#ifdef __SYMBIAN32__
williamr@4
   131
NONSHARABLE_CLASS ( basic_istringstream ) : public basic_istream<_CharT, _Traits>
williamr@4
   132
#else
williamr@4
   133
class basic_istringstream : public basic_istream<_CharT, _Traits>
williamr@4
   134
#endif
williamr@4
   135
{
williamr@4
   136
public:                         // Typedefs
williamr@4
   137
  typedef typename _Traits::char_type   char_type;
williamr@4
   138
  typedef typename _Traits::int_type    int_type;
williamr@4
   139
  typedef typename _Traits::pos_type    pos_type;
williamr@4
   140
  typedef typename _Traits::off_type    off_type;
williamr@4
   141
  typedef _Traits traits_type;
williamr@4
   142
williamr@4
   143
  typedef basic_ios<_CharT, _Traits>                _Basic_ios;
williamr@4
   144
  typedef basic_istream<_CharT, _Traits>            _Base;
williamr@4
   145
  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
williamr@4
   146
  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
williamr@4
   147
williamr@4
   148
public:                         // Constructors, destructor.
williamr@4
   149
  basic_istringstream(ios_base::openmode __mode = ios_base::in);
williamr@4
   150
  basic_istringstream(const _String& __str,
williamr@4
   151
                      ios_base::openmode __mode = ios_base::in);
williamr@4
   152
  ~basic_istringstream();
williamr@4
   153
williamr@4
   154
public:                         // Member functions
williamr@4
   155
williamr@4
   156
  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
williamr@4
   157
    { return __CONST_CAST(_Buf*,&_M_buf); }
williamr@4
   158
williamr@4
   159
  _String str() const { return _M_buf.str(); }
williamr@4
   160
  void str(const _String& __s) { _M_buf.str(__s); }
williamr@4
   161
  
williamr@4
   162
private:
williamr@4
   163
  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
williamr@4
   164
};
williamr@4
   165
williamr@4
   166
williamr@4
   167
//----------------------------------------------------------------------
williamr@4
   168
// Class basic_ostringstream, an output stream that uses a stringbuf.
williamr@4
   169
williamr@4
   170
template <class _CharT, class _Traits, class _Alloc>
williamr@4
   171
#ifdef __SYMBIAN32__
williamr@4
   172
NONSHARABLE_CLASS ( basic_ostringstream ) : public basic_ostream<_CharT, _Traits>
williamr@4
   173
#else
williamr@4
   174
class basic_ostringstream : public basic_ostream<_CharT, _Traits>
williamr@4
   175
#endif
williamr@4
   176
{
williamr@4
   177
public:                         // Typedefs
williamr@4
   178
  typedef typename _Traits::char_type   char_type;
williamr@4
   179
  typedef typename _Traits::int_type    int_type;
williamr@4
   180
  typedef typename _Traits::pos_type    pos_type;
williamr@4
   181
  typedef typename _Traits::off_type    off_type;
williamr@4
   182
  typedef _Traits traits_type;
williamr@4
   183
williamr@4
   184
  typedef basic_ios<_CharT, _Traits>                _Basic_ios;
williamr@4
   185
  typedef basic_ostream<_CharT, _Traits>            _Base;
williamr@4
   186
  typedef basic_string<_CharT, _Traits, _Alloc>     _String;
williamr@4
   187
  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
williamr@4
   188
williamr@4
   189
public:                         // Constructors, destructor.
williamr@4
   190
  basic_ostringstream(ios_base::openmode __mode = ios_base::out);
williamr@4
   191
  basic_ostringstream(const _String& __str,
williamr@4
   192
                      ios_base::openmode __mode = ios_base::out);
williamr@4
   193
  ~basic_ostringstream();
williamr@4
   194
williamr@4
   195
public:                         // Member functions.
williamr@4
   196
williamr@4
   197
  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
williamr@4
   198
    { return __CONST_CAST(_Buf*,&_M_buf); }
williamr@4
   199
williamr@4
   200
  _String str() const { return _M_buf.str(); }
williamr@4
   201
    void str(const _String& __s) { _M_buf.str(__s); } // dwa 02/07/00 - BUG STOMPER DAVE
williamr@4
   202
williamr@4
   203
williamr@4
   204
private:
williamr@4
   205
  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
williamr@4
   206
};
williamr@4
   207
williamr@4
   208
williamr@4
   209
//----------------------------------------------------------------------
williamr@4
   210
// Class basic_stringstream, a bidirectional stream that uses a stringbuf.
williamr@4
   211
williamr@4
   212
template <class _CharT, class _Traits, class _Alloc>
williamr@4
   213
#ifdef __SYMBIAN32__
williamr@4
   214
NONSHARABLE_CLASS ( basic_stringstream ) : public basic_iostream<_CharT, _Traits>
williamr@4
   215
#else
williamr@4
   216
class basic_stringstream : public basic_iostream<_CharT, _Traits>
williamr@4
   217
#endif
williamr@4
   218
{
williamr@4
   219
public:                         // Typedefs
williamr@4
   220
  typedef typename _Traits::char_type char_type;
williamr@4
   221
  typedef typename _Traits::int_type  int_type;
williamr@4
   222
  typedef typename _Traits::pos_type  pos_type;
williamr@4
   223
  typedef typename _Traits::off_type  off_type;
williamr@4
   224
  typedef _Traits  traits_type;
williamr@4
   225
williamr@4
   226
  typedef basic_ios<_CharT, _Traits>                 _Basic_ios;
williamr@4
   227
  typedef basic_iostream<_CharT, _Traits>            _Base;
williamr@4
   228
  typedef basic_string<_CharT, _Traits, _Alloc>      _String;
williamr@4
   229
  typedef basic_stringbuf<_CharT, _Traits, _Alloc>  _Buf;
williamr@4
   230
  
williamr@4
   231
  typedef ios_base::openmode openmode;
williamr@4
   232
williamr@4
   233
public:                         // Constructors, destructor.
williamr@4
   234
  _STLP_DECLSPEC basic_stringstream(openmode __mod = ios_base::in | ios_base::out);
williamr@4
   235
  _STLP_DECLSPEC basic_stringstream(const _String& __str,
williamr@4
   236
                     openmode __mod = ios_base::in | ios_base::out);
williamr@4
   237
  ~basic_stringstream();
williamr@4
   238
williamr@4
   239
public:                         // Member functions.
williamr@4
   240
williamr@4
   241
  basic_stringbuf<_CharT, _Traits, _Alloc>* rdbuf() const
williamr@4
   242
    { return __CONST_CAST(_Buf*,&_M_buf); }
williamr@4
   243
williamr@4
   244
  _String str() const { return _M_buf.str(); }
williamr@4
   245
    void str(const _String& __s) { _M_buf.str(__s); }
williamr@4
   246
williamr@4
   247
private:
williamr@4
   248
  basic_stringbuf<_CharT, _Traits, _Alloc> _M_buf;
williamr@4
   249
};
williamr@4
   250
williamr@4
   251
williamr@4
   252
# if defined (_STLP_USE_TEMPLATE_EXPORT)
williamr@4
   253
_STLP_EXPORT_TEMPLATE_CLASS basic_istringstream<char, char_traits<char>, allocator<char> >;
williamr@4
   254
_STLP_EXPORT_TEMPLATE_CLASS basic_ostringstream<char, char_traits<char>, allocator<char> >;
williamr@4
   255
_STLP_EXPORT_TEMPLATE_CLASS basic_stringstream<char, char_traits<char>, allocator<char> >;
williamr@4
   256
#  if !defined (_STLP_NO_WCHAR_T)
williamr@4
   257
_STLP_EXPORT_TEMPLATE_CLASS basic_istringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
williamr@4
   258
_STLP_EXPORT_TEMPLATE_CLASS basic_ostringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
williamr@4
   259
_STLP_EXPORT_TEMPLATE_CLASS basic_stringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>  >;
williamr@4
   260
#  endif
williamr@4
   261
# endif /* _STLP_USE_TEMPLATE_EXPORT */
williamr@4
   262
williamr@4
   263
_STLP_END_NAMESPACE
williamr@4
   264
williamr@4
   265
# if  defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION)
williamr@4
   266
#  include <stl/_sstream.c>
williamr@4
   267
# endif
williamr@4
   268
williamr@4
   269
#endif /* _STLP_SSTREAM_H */
williamr@4
   270
williamr@4
   271
// Local Variables:
williamr@4
   272
// mode:C++
williamr@4
   273
// End: