00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef __SGI_STL_STRSTREAM
00049 #define __SGI_STL_STRSTREAM
00050
00051 #include "backward_warning.h"
00052 #include <iosfwd>
00053 #include <ios>
00054 #include <istream>
00055 #include <ostream>
00056 #include <string>
00057
00058 namespace std
00059 {
00060
00061
00062
00063
00064
00065 class strstreambuf : public basic_streambuf<char, char_traits<char> >
00066 {
00067 public:
00068 typedef char_traits<char> _Traits;
00069 typedef basic_streambuf<char, _Traits> _Base;
00070
00071 public:
00072 explicit strstreambuf(streamsize __initial_capacity = 0);
00073 strstreambuf(void* (*__alloc)(size_t), void (*__free)(void*));
00074
00075 strstreambuf(char* __get, streamsize __n, char* __put = 0);
00076 strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0);
00077 strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0);
00078
00079 strstreambuf(const char* __get, streamsize __n);
00080 strstreambuf(const signed char* __get, streamsize __n);
00081 strstreambuf(const unsigned char* __get, streamsize __n);
00082
00083 virtual ~strstreambuf();
00084
00085 public:
00086 void freeze(bool = true);
00087 char* str();
00088 int pcount() const;
00089
00090 protected:
00091 virtual int_type overflow(int_type __c = _Traits::eof());
00092 virtual int_type pbackfail(int_type __c = _Traits::eof());
00093 virtual int_type underflow();
00094 virtual _Base* setbuf(char* __buf, streamsize __n);
00095 virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir,
00096 ios_base::openmode __mode
00097 = ios_base::in | ios_base::out);
00098 virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode
00099 = ios_base::in | ios_base::out);
00100
00101 private:
00102
00103 char* _M_alloc(size_t);
00104 void _M_free(char*);
00105
00106
00107 void _M_setup(char* __get, char* __put, streamsize __n);
00108
00109 private:
00110 void* (*_M_alloc_fun)(size_t);
00111 void (*_M_free_fun)(void*);
00112
00113 bool _M_dynamic : 1;
00114 bool _M_frozen : 1;
00115 bool _M_constant : 1;
00116 };
00117
00118
00119
00120
00121 class istrstream : public basic_istream<char>
00122 {
00123 public:
00124 explicit istrstream(char*);
00125 explicit istrstream(const char*);
00126 istrstream(char* , streamsize);
00127 istrstream(const char*, streamsize);
00128 virtual ~istrstream();
00129
00130 strstreambuf* rdbuf() const;
00131 char* str();
00132
00133 private:
00134 strstreambuf _M_buf;
00135 };
00136
00137
00138
00139
00140 class ostrstream : public basic_ostream<char>
00141 {
00142 public:
00143 ostrstream();
00144 ostrstream(char*, int, ios_base::openmode = ios_base::out);
00145 virtual ~ostrstream();
00146
00147 strstreambuf* rdbuf() const;
00148 void freeze(bool = true);
00149 char* str();
00150 int pcount() const;
00151
00152 private:
00153 strstreambuf _M_buf;
00154 };
00155
00156
00157
00158
00159 class strstream : public basic_iostream<char>
00160 {
00161 public:
00162 typedef char char_type;
00163 typedef char_traits<char>::int_type int_type;
00164 typedef char_traits<char>::pos_type pos_type;
00165 typedef char_traits<char>::off_type off_type;
00166
00167 strstream();
00168 strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out);
00169 virtual ~strstream();
00170
00171 strstreambuf* rdbuf() const;
00172 void freeze(bool = true);
00173 int pcount() const;
00174 char* str();
00175
00176 private:
00177 strstreambuf _M_buf;
00178 };
00179
00180 }
00181
00182 #endif
00183
00184
00185
00186
00187
00188