]>
Commit | Line | Data |
---|---|---|
42526146 PE |
1 | // Backward-compat support -*- C++ -*- |
2 | ||
3 | // Copyright (C) 2001 Free Software Foundation, Inc. | |
4 | // | |
5 | // This file is part of the GNU ISO C++ Library. This library is free | |
6 | // software; you can redistribute it and/or modify it under the | |
7 | // terms of the GNU General Public License as published by the | |
8 | // Free Software Foundation; either version 2, or (at your option) | |
9 | // any later version. | |
10 | ||
11 | // This library is distributed in the hope that it will be useful, | |
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | // GNU General Public License for more details. | |
15 | ||
16 | // You should have received a copy of the GNU General Public License along | |
17 | // with this library; see the file COPYING. If not, write to the Free | |
18 | // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |
19 | // USA. | |
20 | ||
21 | // As a special exception, you may use this file as part of a free software | |
22 | // library without restriction. Specifically, if other files instantiate | |
23 | // templates or use macros or inline functions from this file, or you compile | |
24 | // this file and link it with other files to produce an executable, this | |
25 | // file does not by itself cause the resulting executable to be covered by | |
26 | // the GNU General Public License. This exception does not however | |
27 | // invalidate any other reasons why the executable file might be covered by | |
28 | // the GNU General Public License. | |
29 | ||
27ddcd48 BK |
30 | /* |
31 | * Copyright (c) 1998 | |
32 | * Silicon Graphics Computer Systems, Inc. | |
33 | * | |
34 | * Permission to use, copy, modify, distribute and sell this software | |
35 | * and its documentation for any purpose is hereby granted without fee, | |
36 | * provided that the above copyright notice appear in all copies and | |
37 | * that both that copyright notice and this permission notice appear | |
38 | * in supporting documentation. Silicon Graphics makes no | |
39 | * representations about the suitability of this software for any | |
40 | * purpose. It is provided "as is" without express or implied warranty. | |
41 | */ | |
42 | ||
43 | // WARNING: The classes defined in this header are DEPRECATED. This | |
44 | // header is defined in section D.7.1 of the C++ standard, and it | |
45 | // MAY BE REMOVED in a future standard revision. You should use the | |
46 | // header <sstream> instead. | |
47 | ||
48 | #ifndef __SGI_STL_STRSTREAM | |
49 | #define __SGI_STL_STRSTREAM | |
50 | ||
baac9fce | 51 | #include "backward_warning.h" |
54c1bf78 BK |
52 | #include <iosfwd> |
53 | #include <ios> | |
54 | #include <istream> | |
55 | #include <ostream> | |
56 | #include <string> | |
27ddcd48 | 57 | |
d53d7f6e PE |
58 | namespace std |
59 | { | |
27ddcd48 BK |
60 | |
61 | //---------------------------------------------------------------------- | |
62 | // Class strstreambuf, a streambuf class that manages an array of char. | |
63 | // Note that this class is not a template. | |
64 | ||
65 | class strstreambuf : public basic_streambuf<char, char_traits<char> > | |
66 | { | |
67 | public: // Types. | |
68 | typedef char_traits<char> _Traits; | |
69 | typedef basic_streambuf<char, _Traits> _Base; | |
70 | ||
71 | public: // Constructor, destructor | |
72 | explicit strstreambuf(streamsize __initial_capacity = 0); | |
73 | strstreambuf(void* (*__alloc)(size_t), void (*__free)(void*)); | |
74 | ||
75 | strstreambuf(char* __get, streamsize __n, char* __put = 0); | |
76 | strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0); | |
77 | strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0); | |
78 | ||
79 | strstreambuf(const char* __get, streamsize __n); | |
80 | strstreambuf(const signed char* __get, streamsize __n); | |
81 | strstreambuf(const unsigned char* __get, streamsize __n); | |
82 | ||
83 | virtual ~strstreambuf(); | |
84 | ||
85 | public: // strstreambuf operations. | |
86 | void freeze(bool = true); | |
87 | char* str(); | |
88 | int pcount() const; | |
89 | ||
90 | protected: // Overridden virtual member functions. | |
91 | virtual int_type overflow(int_type __c = _Traits::eof()); | |
92 | virtual int_type pbackfail(int_type __c = _Traits::eof()); | |
93 | virtual int_type underflow(); | |
94 | virtual _Base* setbuf(char* __buf, streamsize __n); | |
95 | virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir, | |
96 | ios_base::openmode __mode | |
97 | = ios_base::in | ios_base::out); | |
98 | virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode | |
99 | = ios_base::in | ios_base::out); | |
100 | ||
101 | private: // Helper functions. | |
102 | // Dynamic allocation, possibly using _M_alloc_fun and _M_free_fun. | |
103 | char* _M_alloc(size_t); | |
104 | void _M_free(char*); | |
105 | ||
106 | // Helper function used in constructors. | |
107 | void _M_setup(char* __get, char* __put, streamsize __n); | |
108 | ||
109 | private: // Data members. | |
110 | void* (*_M_alloc_fun)(size_t); | |
111 | void (*_M_free_fun)(void*); | |
112 | ||
113 | bool _M_dynamic : 1; | |
114 | bool _M_frozen : 1; | |
115 | bool _M_constant : 1; | |
116 | }; | |
117 | ||
118 | //---------------------------------------------------------------------- | |
119 | // Class istrstream, an istream that manages a strstreambuf. | |
120 | ||
121 | class istrstream : public basic_istream<char> | |
122 | { | |
123 | public: | |
124 | explicit istrstream(char*); | |
125 | explicit istrstream(const char*); | |
126 | istrstream(char* , streamsize); | |
127 | istrstream(const char*, streamsize); | |
128 | virtual ~istrstream(); | |
129 | ||
130 | strstreambuf* rdbuf() const; | |
131 | char* str(); | |
132 | ||
133 | private: | |
134 | strstreambuf _M_buf; | |
135 | }; | |
136 | ||
137 | //---------------------------------------------------------------------- | |
138 | // Class ostrstream | |
139 | ||
140 | class ostrstream : public basic_ostream<char> | |
141 | { | |
142 | public: | |
143 | ostrstream(); | |
144 | ostrstream(char*, int, ios_base::openmode = ios_base::out); | |
145 | virtual ~ostrstream(); | |
146 | ||
147 | strstreambuf* rdbuf() const; | |
148 | void freeze(bool = true); | |
149 | char* str(); | |
150 | int pcount() const; | |
151 | ||
152 | private: | |
153 | strstreambuf _M_buf; | |
154 | }; | |
155 | ||
156 | //---------------------------------------------------------------------- | |
157 | // Class strstream | |
158 | ||
159 | class strstream : public basic_iostream<char> | |
160 | { | |
161 | public: | |
162 | typedef char char_type; | |
163 | typedef char_traits<char>::int_type int_type; | |
164 | typedef char_traits<char>::pos_type pos_type; | |
165 | typedef char_traits<char>::off_type off_type; | |
166 | ||
167 | strstream(); | |
168 | strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out); | |
169 | virtual ~strstream(); | |
170 | ||
171 | strstreambuf* rdbuf() const; | |
172 | void freeze(bool = true); | |
173 | int pcount() const; | |
174 | char* str(); | |
175 | ||
176 | private: | |
177 | strstreambuf _M_buf; | |
178 | }; | |
179 | ||
d53d7f6e | 180 | } // namespace std |
27ddcd48 BK |
181 | |
182 | #endif /* __SGI_STL_STRSTREAM */ | |
183 | ||
184 | // Local Variables: | |
185 | // mode:C++ | |
186 | // End: | |
187 | ||
188 |