137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh/* 237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Copyright (c) 1999 337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Silicon Graphics Computer Systems, Inc. 437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * 537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Copyright (c) 1999 637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Boris Fomitchev 737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * 837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * This material is provided "as is", with absolutely no warranty expressed 937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * or implied. Any use is at your own risk. 1037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * 1137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Permission to use or copy this software for any purpose is hereby granted 1237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * without fee, provided the above notices are retained on all copies. 1337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Permission to modify the code and to distribute modified code is granted, 1437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * provided the above notices are retained, and a notice that the code was 1537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * modified is included with the above copyright notice. 1637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * 1737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh */ 1837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_INTERNAL_STRSTREAM 1937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#define _STLP_INTERNAL_STRSTREAM 2037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 2137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_INTERNAL_STREAMBUF 2237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# include <stl/_streambuf.h> 2337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif 2437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 2537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_INTERNAL_ISTREAM 2637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# include <stl/_istream.h> // Includes <ostream>, <ios>, <iosfwd> 2737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif 2837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 2937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_INTERNAL_STRING_H 3037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# include <stl/_string.h> 3137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif 3237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 3337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh_STLP_BEGIN_NAMESPACE 3437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 3537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_USE_NAMESPACES 3637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# define strstream _STLP_strstream 3737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# define ostrstream _STLP_ostrstream 3837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# define istrstream _STLP_istrstream 3937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh# define strstreambuf _STLP_strstreambuf 4037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif 4137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 4237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh//---------------------------------------------------------------------- 4337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// Class strstreambuf, a streambuf class that manages an array of char. 4437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// Note that this class is not a template. 4537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 4637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehclass _STLP_CLASS_DECLSPEC strstreambuf : public basic_streambuf<char, char_traits<char> > { 4737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic: // Types. 4837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef char_traits<char> _Traits; 4937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef basic_streambuf<char, char_traits<char> > _Base; 5037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef void* (*__alloc_fn)(size_t); 5137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef void (*__free_fn)(void*); 5237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic: // Constructor, destructor 5337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 5437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh explicit strstreambuf(streamsize _Initial_capacity = 0); 5537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 5637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(__alloc_fn, __free_fn); 5737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 5837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(char* __get, streamsize __n, char* __put = 0); 5937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0); 6037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0); 6137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 6237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(const char* __get, streamsize __n); 6337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(const signed char* __get, streamsize __n); 6437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf(const unsigned char* __get, streamsize __n); 6537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 6637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual ~strstreambuf(); 6737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 6837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic: // strstreambuf operations. 6937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh void freeze(bool = true); 7037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh char* str(); 7137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh int pcount() const; 7237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 7337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprotected: // Overridden virtual member functions. 7437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual int_type overflow(int_type __c = _Traits::eof()); 7537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual int_type pbackfail(int_type __c = _Traits::eof()); 7637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual int_type underflow(); 7737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual _Base* setbuf(char* __buf, streamsize __n); 7837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir, 7937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh ios_base::openmode __mode 8037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh = ios_base::in | ios_base::out); 8137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode 8237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh = ios_base::in | ios_base::out); 8337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 8437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprivate: // Helper functions. 8537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh // Dynamic allocation, possibly using _M_alloc_fun and _M_free_fun. 8637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh char* _M_alloc(size_t); 8737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh void _M_free(char*); 8837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 8937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh // Helper function used in constructors. 9037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh void _M_setup(char* __get, char* __put, streamsize __n); 9137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprivate: // Data members. 9237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh __alloc_fn _M_alloc_fun; 9337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh __free_fn _M_free_fun; 9437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh bool _M_dynamic : 1; 9537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh bool _M_frozen : 1; 9637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh bool _M_constant : 1; 9737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh}; 9837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 9937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh//---------------------------------------------------------------------- 10037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// Class istrstream, an istream that manages a strstreambuf. 10137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 10237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehclass _STLP_CLASS_DECLSPEC istrstream : public basic_istream<char, char_traits<char> > { 10337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic: 10437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh explicit istrstream(char*); 10537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh explicit istrstream(const char*); 10637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh istrstream(char* , streamsize); 10737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh istrstream(const char*, streamsize); 10837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual ~istrstream(); 10937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 11037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf* rdbuf() const; 11137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh char* str(); 11237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 11337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprivate: 11437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf _M_buf; 11537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh}; 11637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 11737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh//---------------------------------------------------------------------- 11837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// Class ostrstream 11937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 12037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehclass _STLP_CLASS_DECLSPEC ostrstream : public basic_ostream<char, char_traits<char> > 12137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh{ 12237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic: 12337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh ostrstream(); 12437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh ostrstream(char*, int, ios_base::openmode = ios_base::out); 12537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual ~ostrstream(); 12637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 12737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf* rdbuf() const; 12837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh void freeze(bool = true); 12937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh char* str(); 13037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh int pcount() const; 13137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 13237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprivate: 13337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf _M_buf; 13437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh}; 13537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 13637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh//---------------------------------------------------------------------- 13737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// Class strstream 13837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 13937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehclass _STLP_CLASS_DECLSPEC strstream : public basic_iostream<char, char_traits<char> > { 14037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic: 14137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef char char_type; 14237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef char_traits<char>::int_type int_type; 14337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef char_traits<char>::pos_type pos_type; 14437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh typedef char_traits<char>::off_type off_type; 14537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 14637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstream(); 14737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out); 14837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh virtual ~strstream(); 14937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 15037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf* rdbuf() const; 15137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh void freeze(bool = true); 15237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh int pcount() const; 15337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh char* str(); 15437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 15537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprivate: 15637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstreambuf _M_buf; 15737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 15837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh //explicitely defined as private to avoid warnings: 15937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstream(strstream const&); 16037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh strstream& operator = (strstream const&); 16137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh}; 16237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 16337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh_STLP_END_NAMESPACE 16437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh 16537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /* _STLP_INTERNAL_STRSTREAM */ 166