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