]>
Commit | Line | Data |
---|---|---|
9a56333e BK |
1 | // Backward-compat support -*- C++ -*- |
2 | ||
5624e564 | 3 | // Copyright (C) 2001-2015 Free Software Foundation, Inc. |
9a56333e BK |
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 | |
748086b7 | 8 | // Free Software Foundation; either version 3, or (at your option) |
9a56333e BK |
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 | ||
748086b7 JJ |
16 | // Under Section 7 of GPL version 3, you are granted additional |
17 | // permissions described in the GCC Runtime Library Exception, version | |
18 | // 3.1, as published by the Free Software Foundation. | |
9a56333e | 19 | |
748086b7 JJ |
20 | // You should have received a copy of the GNU General Public License and |
21 | // a copy of the GCC Runtime Library Exception along with this program; | |
22 | // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
23 | // <http://www.gnu.org/licenses/>. | |
9a56333e BK |
24 | |
25 | /* | |
26 | * Copyright (c) 1998 | |
27 | * Silicon Graphics Computer Systems, Inc. | |
28 | * | |
29 | * Permission to use, copy, modify, distribute and sell this software | |
30 | * and its documentation for any purpose is hereby granted without fee, | |
31 | * provided that the above copyright notice appear in all copies and | |
32 | * that both that copyright notice and this permission notice appear | |
33 | * in supporting documentation. Silicon Graphics makes no | |
34 | * representations about the suitability of this software for any | |
35 | * purpose. It is provided "as is" without express or implied warranty. | |
36 | */ | |
37 | ||
38 | // WARNING: The classes defined in this header are DEPRECATED. This | |
39 | // header is defined in section D.7.1 of the C++ standard, and it | |
40abbf1f | 40 | // MAY BE REMOVED in a future standard revision. One should use the |
9a56333e BK |
41 | // header <sstream> instead. |
42 | ||
30f276c1 BK |
43 | /** @file backward/strstream |
44 | * This is an internal header file, included by other library headers. | |
45 | * Do not attempt to use it directly. @headername{sstream} | |
46 | */ | |
47 | ||
5ecfce5c PC |
48 | #ifndef _BACKWARD_STRSTREAM |
49 | #define _BACKWARD_STRSTREAM | |
9a56333e BK |
50 | |
51 | #include "backward_warning.h" | |
52 | #include <iosfwd> | |
53 | #include <ios> | |
54 | #include <istream> | |
55 | #include <ostream> | |
56 | #include <string> | |
57 | ||
12ffa228 BK |
58 | namespace std _GLIBCXX_VISIBILITY(default) |
59 | { | |
60 | _GLIBCXX_BEGIN_NAMESPACE_VERSION | |
3cbc7af0 | 61 | |
9a56333e BK |
62 | // Class strstreambuf, a streambuf class that manages an array of char. |
63 | // Note that this class is not a template. | |
64 | class strstreambuf : public basic_streambuf<char, char_traits<char> > | |
65 | { | |
e64738b3 | 66 | public: |
9a56333e BK |
67 | // Types. |
68 | typedef char_traits<char> _Traits; | |
69 | typedef basic_streambuf<char, _Traits> _Base; | |
70 | ||
e64738b3 | 71 | public: |
9a56333e BK |
72 | // Constructor, destructor |
73 | explicit strstreambuf(streamsize __initial_capacity = 0); | |
74 | strstreambuf(void* (*__alloc)(size_t), void (*__free)(void*)); | |
75 | ||
50a681c4 JH |
76 | strstreambuf(char* __get, streamsize __n, char* __put = 0) throw (); |
77 | strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0) throw (); | |
78 | strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0) throw (); | |
9a56333e | 79 | |
50a681c4 JH |
80 | strstreambuf(const char* __get, streamsize __n) throw (); |
81 | strstreambuf(const signed char* __get, streamsize __n) throw (); | |
82 | strstreambuf(const unsigned char* __get, streamsize __n) throw (); | |
9a56333e BK |
83 | |
84 | virtual ~strstreambuf(); | |
85 | ||
86 | public: | |
50a681c4 JH |
87 | void freeze(bool = true) throw (); |
88 | char* str() throw (); | |
89 | _GLIBCXX_PURE int pcount() const throw (); | |
9a56333e BK |
90 | |
91 | protected: | |
92 | virtual int_type overflow(int_type __c = _Traits::eof()); | |
93 | virtual int_type pbackfail(int_type __c = _Traits::eof()); | |
94 | virtual int_type underflow(); | |
95 | virtual _Base* setbuf(char* __buf, streamsize __n); | |
96 | virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir, | |
97 | ios_base::openmode __mode | |
98 | = ios_base::in | ios_base::out); | |
99 | virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode | |
100 | = ios_base::in | ios_base::out); | |
101 | ||
e64738b3 | 102 | private: |
26c691a8 BK |
103 | strstreambuf& |
104 | operator=(const strstreambuf&); | |
105 | ||
106 | strstreambuf(const strstreambuf&); | |
107 | ||
9a56333e BK |
108 | // Dynamic allocation, possibly using _M_alloc_fun and _M_free_fun. |
109 | char* _M_alloc(size_t); | |
110 | void _M_free(char*); | |
111 | ||
112 | // Helper function used in constructors. | |
50a681c4 | 113 | void _M_setup(char* __get, char* __put, streamsize __n) throw (); |
9a56333e | 114 | |
e64738b3 | 115 | private: |
9a56333e BK |
116 | // Data members. |
117 | void* (*_M_alloc_fun)(size_t); | |
118 | void (*_M_free_fun)(void*); | |
119 | ||
120 | bool _M_dynamic : 1; | |
121 | bool _M_frozen : 1; | |
122 | bool _M_constant : 1; | |
123 | }; | |
124 | ||
125 | // Class istrstream, an istream that manages a strstreambuf. | |
126 | class istrstream : public basic_istream<char> | |
127 | { | |
128 | public: | |
129 | explicit istrstream(char*); | |
130 | explicit istrstream(const char*); | |
131 | istrstream(char* , streamsize); | |
132 | istrstream(const char*, streamsize); | |
133 | virtual ~istrstream(); | |
134 | ||
50a681c4 JH |
135 | _GLIBCXX_CONST strstreambuf* rdbuf() const throw (); |
136 | char* str() throw (); | |
9a56333e BK |
137 | |
138 | private: | |
139 | strstreambuf _M_buf; | |
140 | }; | |
141 | ||
142 | // Class ostrstream | |
143 | class ostrstream : public basic_ostream<char> | |
144 | { | |
145 | public: | |
146 | ostrstream(); | |
147 | ostrstream(char*, int, ios_base::openmode = ios_base::out); | |
148 | virtual ~ostrstream(); | |
149 | ||
50a681c4 JH |
150 | _GLIBCXX_CONST strstreambuf* rdbuf() const throw (); |
151 | void freeze(bool = true) throw(); | |
152 | char* str() throw (); | |
153 | _GLIBCXX_PURE int pcount() const throw (); | |
9a56333e BK |
154 | |
155 | private: | |
156 | strstreambuf _M_buf; | |
157 | }; | |
158 | ||
159 | // Class strstream | |
160 | class strstream : public basic_iostream<char> | |
161 | { | |
162 | public: | |
163 | typedef char char_type; | |
164 | typedef char_traits<char>::int_type int_type; | |
165 | typedef char_traits<char>::pos_type pos_type; | |
166 | typedef char_traits<char>::off_type off_type; | |
167 | ||
168 | strstream(); | |
169 | strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out); | |
170 | virtual ~strstream(); | |
171 | ||
50a681c4 JH |
172 | _GLIBCXX_CONST strstreambuf* rdbuf() const throw (); |
173 | void freeze(bool = true) throw (); | |
174 | _GLIBCXX_PURE int pcount() const throw (); | |
175 | char* str() throw (); | |
9a56333e BK |
176 | |
177 | private: | |
178 | strstreambuf _M_buf; | |
179 | }; | |
3cbc7af0 | 180 | |
12ffa228 BK |
181 | _GLIBCXX_END_NAMESPACE_VERSION |
182 | } // namespace | |
3cbc7af0 | 183 | |
e64738b3 | 184 | #endif |