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