19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STRSTREAM 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_STRSTREAM 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STREAMBUF 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_streambuf.h> 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ISTREAM 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_istream.h> // Includes <ostream>, <ios>, <iosfwd> 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STRING_H 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_string.h> 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_USE_NAMESPACES 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define strstream _STLP_strstream 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define ostrstream _STLP_ostrstream 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define istrstream _STLP_istrstream 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define strstreambuf _STLP_strstreambuf 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class strstreambuf, a streambuf class that manages an array of char. 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Note that this class is not a template. 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC strstreambuf : public basic_streambuf<char, char_traits<char> > { 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Types. 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef char_traits<char> _Traits; 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_streambuf<char, char_traits<char> > _Base; 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef void* (*__alloc_fn)(size_t); 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef void (*__free_fn)(void*); 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Constructor, destructor 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit strstreambuf(streamsize _Initial_capacity = 0); 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(__alloc_fn, __free_fn); 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(char* __get, streamsize __n, char* __put = 0); 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0); 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0); 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(const char* __get, streamsize __n); 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(const signed char* __get, streamsize __n); 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf(const unsigned char* __get, streamsize __n); 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual ~strstreambuf(); 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // strstreambuf operations. 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void freeze(bool = true); 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char* str(); 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int pcount() const; 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected: // Overridden virtual member functions. 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual int_type overflow(int_type __c = _Traits::eof()); 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual int_type pbackfail(int_type __c = _Traits::eof()); 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual int_type underflow(); 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual _Base* setbuf(char* __buf, streamsize __n); 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir, 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::openmode __mode 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block = ios_base::in | ios_base::out); 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block = ios_base::in | ios_base::out); 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: // Helper functions. 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Dynamic allocation, possibly using _M_alloc_fun and _M_free_fun. 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char* _M_alloc(size_t); 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_free(char*); 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Helper function used in constructors. 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_setup(char* __get, char* __put, streamsize __n); 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: // Data members. 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __alloc_fn _M_alloc_fun; 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __free_fn _M_free_fun; 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_dynamic : 1; 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_frozen : 1; 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_constant : 1; 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class istrstream, an istream that manages a strstreambuf. 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC istrstream : public basic_istream<char, char_traits<char> > { 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit istrstream(char*); 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit istrstream(const char*); 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block istrstream(char* , streamsize); 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block istrstream(const char*, streamsize); 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual ~istrstream(); 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf* rdbuf() const; 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char* str(); 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf _M_buf; 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class ostrstream 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC ostrstream : public basic_ostream<char, char_traits<char> > 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ostrstream(); 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ostrstream(char*, int, ios_base::openmode = ios_base::out); 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual ~ostrstream(); 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf* rdbuf() const; 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void freeze(bool = true); 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char* str(); 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int pcount() const; 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf _M_buf; 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class strstream 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC strstream : public basic_iostream<char, char_traits<char> > { 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef char char_type; 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef char_traits<char>::int_type int_type; 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef char_traits<char>::pos_type pos_type; 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef char_traits<char>::off_type off_type; 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstream(); 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out); 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual ~strstream(); 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf* rdbuf() const; 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void freeze(bool = true); 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int pcount() const; 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char* str(); 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstreambuf _M_buf; 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //explicitely defined as private to avoid warnings: 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstream(strstream const&); 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block strstream& operator = (strstream const&); 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_STRSTREAM */ 166