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