100db7afdSDavid E. O'Brien// Backward-compat support -*- C++ -*- 200db7afdSDavid E. O'Brien 3*f8a1b7d9SAlexander Kabaev// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. 400db7afdSDavid E. O'Brien// 500db7afdSDavid E. O'Brien// This file is part of the GNU ISO C++ Library. This library is free 600db7afdSDavid E. O'Brien// software; you can redistribute it and/or modify it under the 700db7afdSDavid E. O'Brien// terms of the GNU General Public License as published by the 800db7afdSDavid E. O'Brien// Free Software Foundation; either version 2, or (at your option) 900db7afdSDavid E. O'Brien// any later version. 1000db7afdSDavid E. O'Brien 1100db7afdSDavid E. O'Brien// This library is distributed in the hope that it will be useful, 1200db7afdSDavid E. O'Brien// but WITHOUT ANY WARRANTY; without even the implied warranty of 1300db7afdSDavid E. O'Brien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1400db7afdSDavid E. O'Brien// GNU General Public License for more details. 1500db7afdSDavid E. O'Brien 1600db7afdSDavid E. O'Brien// You should have received a copy of the GNU General Public License along 1700db7afdSDavid E. O'Brien// with this library; see the file COPYING. If not, write to the Free 18*f8a1b7d9SAlexander Kabaev// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 1900db7afdSDavid E. O'Brien// USA. 2000db7afdSDavid E. O'Brien 2100db7afdSDavid E. O'Brien// As a special exception, you may use this file as part of a free software 2200db7afdSDavid E. O'Brien// library without restriction. Specifically, if other files instantiate 2300db7afdSDavid E. O'Brien// templates or use macros or inline functions from this file, or you compile 2400db7afdSDavid E. O'Brien// this file and link it with other files to produce an executable, this 2500db7afdSDavid E. O'Brien// file does not by itself cause the resulting executable to be covered by 2600db7afdSDavid E. O'Brien// the GNU General Public License. This exception does not however 2700db7afdSDavid E. O'Brien// invalidate any other reasons why the executable file might be covered by 2800db7afdSDavid E. O'Brien// the GNU General Public License. 2900db7afdSDavid E. O'Brien 3000db7afdSDavid E. O'Brien/* 3100db7afdSDavid E. O'Brien * Copyright (c) 1998 3200db7afdSDavid E. O'Brien * Silicon Graphics Computer Systems, Inc. 3300db7afdSDavid E. O'Brien * 3400db7afdSDavid E. O'Brien * Permission to use, copy, modify, distribute and sell this software 3500db7afdSDavid E. O'Brien * and its documentation for any purpose is hereby granted without fee, 3600db7afdSDavid E. O'Brien * provided that the above copyright notice appear in all copies and 3700db7afdSDavid E. O'Brien * that both that copyright notice and this permission notice appear 3800db7afdSDavid E. O'Brien * in supporting documentation. Silicon Graphics makes no 3900db7afdSDavid E. O'Brien * representations about the suitability of this software for any 4000db7afdSDavid E. O'Brien * purpose. It is provided "as is" without express or implied warranty. 4100db7afdSDavid E. O'Brien */ 4200db7afdSDavid E. O'Brien 4300db7afdSDavid E. O'Brien// WARNING: The classes defined in this header are DEPRECATED. This 4400db7afdSDavid E. O'Brien// header is defined in section D.7.1 of the C++ standard, and it 4500db7afdSDavid E. O'Brien// MAY BE REMOVED in a future standard revision. You should use the 4600db7afdSDavid E. O'Brien// header <sstream> instead. 4700db7afdSDavid E. O'Brien 4800db7afdSDavid E. O'Brien#ifndef __SGI_STL_STRSTREAM 4900db7afdSDavid E. O'Brien#define __SGI_STL_STRSTREAM 5000db7afdSDavid E. O'Brien 5100db7afdSDavid E. O'Brien#include "backward_warning.h" 5200db7afdSDavid E. O'Brien#include <iosfwd> 5300db7afdSDavid E. O'Brien#include <ios> 5400db7afdSDavid E. O'Brien#include <istream> 5500db7afdSDavid E. O'Brien#include <ostream> 5600db7afdSDavid E. O'Brien#include <string> 5700db7afdSDavid E. O'Brien 58*f8a1b7d9SAlexander Kabaev_GLIBCXX_BEGIN_NAMESPACE(std) 59*f8a1b7d9SAlexander Kabaev 6000db7afdSDavid E. O'Brien // Class strstreambuf, a streambuf class that manages an array of char. 6100db7afdSDavid E. O'Brien // Note that this class is not a template. 6200db7afdSDavid E. O'Brien class strstreambuf : public basic_streambuf<char, char_traits<char> > 6300db7afdSDavid E. O'Brien { 64ca6500fcSAlexander Kabaev public: 65ca6500fcSAlexander Kabaev // Types. 6600db7afdSDavid E. O'Brien typedef char_traits<char> _Traits; 6700db7afdSDavid E. O'Brien typedef basic_streambuf<char, _Traits> _Base; 6800db7afdSDavid E. O'Brien 69ca6500fcSAlexander Kabaev public: 70ca6500fcSAlexander Kabaev // Constructor, destructor 7100db7afdSDavid E. O'Brien explicit strstreambuf(streamsize __initial_capacity = 0); 7200db7afdSDavid E. O'Brien strstreambuf(void* (*__alloc)(size_t), void (*__free)(void*)); 7300db7afdSDavid E. O'Brien 7400db7afdSDavid E. O'Brien strstreambuf(char* __get, streamsize __n, char* __put = 0); 7500db7afdSDavid E. O'Brien strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0); 7600db7afdSDavid E. O'Brien strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0); 7700db7afdSDavid E. O'Brien 7800db7afdSDavid E. O'Brien strstreambuf(const char* __get, streamsize __n); 7900db7afdSDavid E. O'Brien strstreambuf(const signed char* __get, streamsize __n); 8000db7afdSDavid E. O'Brien strstreambuf(const unsigned char* __get, streamsize __n); 8100db7afdSDavid E. O'Brien 8200db7afdSDavid E. O'Brien virtual ~strstreambuf(); 8300db7afdSDavid E. O'Brien 84ca6500fcSAlexander Kabaev public: 8500db7afdSDavid E. O'Brien void freeze(bool = true); 8600db7afdSDavid E. O'Brien char* str(); 8700db7afdSDavid E. O'Brien int pcount() const; 8800db7afdSDavid E. O'Brien 89ca6500fcSAlexander Kabaev protected: 9000db7afdSDavid E. O'Brien virtual int_type overflow(int_type __c = _Traits::eof()); 9100db7afdSDavid E. O'Brien virtual int_type pbackfail(int_type __c = _Traits::eof()); 9200db7afdSDavid E. O'Brien virtual int_type underflow(); 9300db7afdSDavid E. O'Brien virtual _Base* setbuf(char* __buf, streamsize __n); 9400db7afdSDavid E. O'Brien virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir, 9500db7afdSDavid E. O'Brien ios_base::openmode __mode 9600db7afdSDavid E. O'Brien = ios_base::in | ios_base::out); 9700db7afdSDavid E. O'Brien virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode 9800db7afdSDavid E. O'Brien = ios_base::in | ios_base::out); 9900db7afdSDavid E. O'Brien 100ca6500fcSAlexander Kabaev private: 101ffeaf689SAlexander Kabaev strstreambuf& 102ffeaf689SAlexander Kabaev operator=(const strstreambuf&); 103ffeaf689SAlexander Kabaev 104ffeaf689SAlexander Kabaev strstreambuf(const strstreambuf&); 105ffeaf689SAlexander Kabaev 10600db7afdSDavid E. O'Brien // Dynamic allocation, possibly using _M_alloc_fun and _M_free_fun. 10700db7afdSDavid E. O'Brien char* _M_alloc(size_t); 10800db7afdSDavid E. O'Brien void _M_free(char*); 10900db7afdSDavid E. O'Brien 11000db7afdSDavid E. O'Brien // Helper function used in constructors. 11100db7afdSDavid E. O'Brien void _M_setup(char* __get, char* __put, streamsize __n); 11200db7afdSDavid E. O'Brien 113ca6500fcSAlexander Kabaev private: 114ca6500fcSAlexander Kabaev // Data members. 11500db7afdSDavid E. O'Brien void* (*_M_alloc_fun)(size_t); 11600db7afdSDavid E. O'Brien void (*_M_free_fun)(void*); 11700db7afdSDavid E. O'Brien 11800db7afdSDavid E. O'Brien bool _M_dynamic : 1; 11900db7afdSDavid E. O'Brien bool _M_frozen : 1; 12000db7afdSDavid E. O'Brien bool _M_constant : 1; 12100db7afdSDavid E. O'Brien }; 12200db7afdSDavid E. O'Brien 12300db7afdSDavid E. O'Brien // Class istrstream, an istream that manages a strstreambuf. 12400db7afdSDavid E. O'Brien class istrstream : public basic_istream<char> 12500db7afdSDavid E. O'Brien { 12600db7afdSDavid E. O'Brien public: 12700db7afdSDavid E. O'Brien explicit istrstream(char*); 12800db7afdSDavid E. O'Brien explicit istrstream(const char*); 12900db7afdSDavid E. O'Brien istrstream(char* , streamsize); 13000db7afdSDavid E. O'Brien istrstream(const char*, streamsize); 13100db7afdSDavid E. O'Brien virtual ~istrstream(); 13200db7afdSDavid E. O'Brien 13300db7afdSDavid E. O'Brien strstreambuf* rdbuf() const; 13400db7afdSDavid E. O'Brien char* str(); 13500db7afdSDavid E. O'Brien 13600db7afdSDavid E. O'Brien private: 13700db7afdSDavid E. O'Brien strstreambuf _M_buf; 13800db7afdSDavid E. O'Brien }; 13900db7afdSDavid E. O'Brien 14000db7afdSDavid E. O'Brien // Class ostrstream 14100db7afdSDavid E. O'Brien class ostrstream : public basic_ostream<char> 14200db7afdSDavid E. O'Brien { 14300db7afdSDavid E. O'Brien public: 14400db7afdSDavid E. O'Brien ostrstream(); 14500db7afdSDavid E. O'Brien ostrstream(char*, int, ios_base::openmode = ios_base::out); 14600db7afdSDavid E. O'Brien virtual ~ostrstream(); 14700db7afdSDavid E. O'Brien 14800db7afdSDavid E. O'Brien strstreambuf* rdbuf() const; 14900db7afdSDavid E. O'Brien void freeze(bool = true); 15000db7afdSDavid E. O'Brien char* str(); 15100db7afdSDavid E. O'Brien int pcount() const; 15200db7afdSDavid E. O'Brien 15300db7afdSDavid E. O'Brien private: 15400db7afdSDavid E. O'Brien strstreambuf _M_buf; 15500db7afdSDavid E. O'Brien }; 15600db7afdSDavid E. O'Brien 15700db7afdSDavid E. O'Brien // Class strstream 15800db7afdSDavid E. O'Brien class strstream : public basic_iostream<char> 15900db7afdSDavid E. O'Brien { 16000db7afdSDavid E. O'Brien public: 16100db7afdSDavid E. O'Brien typedef char char_type; 16200db7afdSDavid E. O'Brien typedef char_traits<char>::int_type int_type; 16300db7afdSDavid E. O'Brien typedef char_traits<char>::pos_type pos_type; 16400db7afdSDavid E. O'Brien typedef char_traits<char>::off_type off_type; 16500db7afdSDavid E. O'Brien 16600db7afdSDavid E. O'Brien strstream(); 16700db7afdSDavid E. O'Brien strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out); 16800db7afdSDavid E. O'Brien virtual ~strstream(); 16900db7afdSDavid E. O'Brien 17000db7afdSDavid E. O'Brien strstreambuf* rdbuf() const; 17100db7afdSDavid E. O'Brien void freeze(bool = true); 17200db7afdSDavid E. O'Brien int pcount() const; 17300db7afdSDavid E. O'Brien char* str(); 17400db7afdSDavid E. O'Brien 17500db7afdSDavid E. O'Brien private: 17600db7afdSDavid E. O'Brien strstreambuf _M_buf; 17700db7afdSDavid E. O'Brien }; 178*f8a1b7d9SAlexander Kabaev 179*f8a1b7d9SAlexander Kabaev_GLIBCXX_END_NAMESPACE 180*f8a1b7d9SAlexander Kabaev 181ca6500fcSAlexander Kabaev#endif 182