1*f8a1b7d9SAlexander Kabaev // Compatibility symbols for previous versions -*- C++ -*-
2*f8a1b7d9SAlexander Kabaev
3*f8a1b7d9SAlexander Kabaev // Copyright (C) 2005, 2006
4*f8a1b7d9SAlexander Kabaev // Free Software Foundation, Inc.
5*f8a1b7d9SAlexander Kabaev //
6*f8a1b7d9SAlexander Kabaev // This file is part of the GNU ISO C++ Library. This library is free
7*f8a1b7d9SAlexander Kabaev // software; you can redistribute it and/or modify it under the
8*f8a1b7d9SAlexander Kabaev // terms of the GNU General Public License as published by the
9*f8a1b7d9SAlexander Kabaev // Free Software Foundation; either version 2, or (at your option)
10*f8a1b7d9SAlexander Kabaev // any later version.
11*f8a1b7d9SAlexander Kabaev
12*f8a1b7d9SAlexander Kabaev // This library is distributed in the hope that it will be useful,
13*f8a1b7d9SAlexander Kabaev // but WITHOUT ANY WARRANTY; without even the implied warranty of
14*f8a1b7d9SAlexander Kabaev // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15*f8a1b7d9SAlexander Kabaev // GNU General Public License for more details.
16*f8a1b7d9SAlexander Kabaev
17*f8a1b7d9SAlexander Kabaev // You should have received a copy of the GNU General Public License along
18*f8a1b7d9SAlexander Kabaev // with this library; see the file COPYING. If not, write to the Free
19*f8a1b7d9SAlexander Kabaev // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20*f8a1b7d9SAlexander Kabaev // USA.
21*f8a1b7d9SAlexander Kabaev
22*f8a1b7d9SAlexander Kabaev // As a special exception, you may use this file as part of a free software
23*f8a1b7d9SAlexander Kabaev // library without restriction. Specifically, if other files instantiate
24*f8a1b7d9SAlexander Kabaev // templates or use macros or inline functions from this file, or you compile
25*f8a1b7d9SAlexander Kabaev // this file and link it with other files to produce an executable, this
26*f8a1b7d9SAlexander Kabaev // file does not by itself cause the resulting executable to be covered by
27*f8a1b7d9SAlexander Kabaev // the GNU General Public License. This exception does not however
28*f8a1b7d9SAlexander Kabaev // invalidate any other reasons why the executable file might be covered by
29*f8a1b7d9SAlexander Kabaev // the GNU General Public License.
30*f8a1b7d9SAlexander Kabaev
31*f8a1b7d9SAlexander Kabaev #include <bits/c++config.h>
32*f8a1b7d9SAlexander Kabaev
33*f8a1b7d9SAlexander Kabaev #if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC)
34*f8a1b7d9SAlexander Kabaev #define istreambuf_iterator istreambuf_iteratorXX
35*f8a1b7d9SAlexander Kabaev #define basic_fstream basic_fstreamXX
36*f8a1b7d9SAlexander Kabaev #define basic_ifstream basic_ifstreamXX
37*f8a1b7d9SAlexander Kabaev #define basic_ofstream basic_ofstreamXX
38*f8a1b7d9SAlexander Kabaev #define _M_copy(a, b, c) _M_copyXX(a, b, c)
39*f8a1b7d9SAlexander Kabaev #define _M_move(a, b, c) _M_moveXX(a, b, c)
40*f8a1b7d9SAlexander Kabaev #define _M_assign(a, b, c) _M_assignXX(a, b, c)
41*f8a1b7d9SAlexander Kabaev #define _M_disjunct(a) _M_disjunctXX(a)
42*f8a1b7d9SAlexander Kabaev #define _M_check_length(a, b, c) _M_check_lengthXX(a, b, c)
43*f8a1b7d9SAlexander Kabaev #define _M_set_length_and_sharable(a) _M_set_length_and_sharableXX(a)
44*f8a1b7d9SAlexander Kabaev #define ignore ignoreXX
45*f8a1b7d9SAlexander Kabaev #define eq eqXX
46*f8a1b7d9SAlexander Kabaev #define _List_node_base _List_node_baseXX
47*f8a1b7d9SAlexander Kabaev #endif
48*f8a1b7d9SAlexander Kabaev
49*f8a1b7d9SAlexander Kabaev #include <string>
50*f8a1b7d9SAlexander Kabaev #include <istream>
51*f8a1b7d9SAlexander Kabaev #include <fstream>
52*f8a1b7d9SAlexander Kabaev #include <sstream>
53*f8a1b7d9SAlexander Kabaev #include <cmath>
54*f8a1b7d9SAlexander Kabaev
_GLIBCXX_BEGIN_NAMESPACE(std)55*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
56*f8a1b7d9SAlexander Kabaev
57*f8a1b7d9SAlexander Kabaev // std::istream ignore explicit specializations.
58*f8a1b7d9SAlexander Kabaev template<>
59*f8a1b7d9SAlexander Kabaev basic_istream<char>&
60*f8a1b7d9SAlexander Kabaev basic_istream<char>::
61*f8a1b7d9SAlexander Kabaev ignore(streamsize __n)
62*f8a1b7d9SAlexander Kabaev {
63*f8a1b7d9SAlexander Kabaev if (__n == 1)
64*f8a1b7d9SAlexander Kabaev return ignore();
65*f8a1b7d9SAlexander Kabaev
66*f8a1b7d9SAlexander Kabaev _M_gcount = 0;
67*f8a1b7d9SAlexander Kabaev sentry __cerb(*this, true);
68*f8a1b7d9SAlexander Kabaev if (__cerb && __n > 0)
69*f8a1b7d9SAlexander Kabaev {
70*f8a1b7d9SAlexander Kabaev ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
71*f8a1b7d9SAlexander Kabaev try
72*f8a1b7d9SAlexander Kabaev {
73*f8a1b7d9SAlexander Kabaev const int_type __eof = traits_type::eof();
74*f8a1b7d9SAlexander Kabaev __streambuf_type* __sb = this->rdbuf();
75*f8a1b7d9SAlexander Kabaev int_type __c = __sb->sgetc();
76*f8a1b7d9SAlexander Kabaev
77*f8a1b7d9SAlexander Kabaev // See comment in istream.tcc.
78*f8a1b7d9SAlexander Kabaev bool __large_ignore = false;
79*f8a1b7d9SAlexander Kabaev while (true)
80*f8a1b7d9SAlexander Kabaev {
81*f8a1b7d9SAlexander Kabaev while (_M_gcount < __n
82*f8a1b7d9SAlexander Kabaev && !traits_type::eq_int_type(__c, __eof))
83*f8a1b7d9SAlexander Kabaev {
84*f8a1b7d9SAlexander Kabaev streamsize __size = std::min(streamsize(__sb->egptr()
85*f8a1b7d9SAlexander Kabaev - __sb->gptr()),
86*f8a1b7d9SAlexander Kabaev streamsize(__n - _M_gcount));
87*f8a1b7d9SAlexander Kabaev if (__size > 1)
88*f8a1b7d9SAlexander Kabaev {
89*f8a1b7d9SAlexander Kabaev __sb->gbump(__size);
90*f8a1b7d9SAlexander Kabaev _M_gcount += __size;
91*f8a1b7d9SAlexander Kabaev __c = __sb->sgetc();
92*f8a1b7d9SAlexander Kabaev }
93*f8a1b7d9SAlexander Kabaev else
94*f8a1b7d9SAlexander Kabaev {
95*f8a1b7d9SAlexander Kabaev ++_M_gcount;
96*f8a1b7d9SAlexander Kabaev __c = __sb->snextc();
97*f8a1b7d9SAlexander Kabaev }
98*f8a1b7d9SAlexander Kabaev }
99*f8a1b7d9SAlexander Kabaev if (__n == numeric_limits<streamsize>::max()
100*f8a1b7d9SAlexander Kabaev && !traits_type::eq_int_type(__c, __eof))
101*f8a1b7d9SAlexander Kabaev {
102*f8a1b7d9SAlexander Kabaev _M_gcount = numeric_limits<streamsize>::min();
103*f8a1b7d9SAlexander Kabaev __large_ignore = true;
104*f8a1b7d9SAlexander Kabaev }
105*f8a1b7d9SAlexander Kabaev else
106*f8a1b7d9SAlexander Kabaev break;
107*f8a1b7d9SAlexander Kabaev }
108*f8a1b7d9SAlexander Kabaev
109*f8a1b7d9SAlexander Kabaev if (__large_ignore)
110*f8a1b7d9SAlexander Kabaev _M_gcount = numeric_limits<streamsize>::max();
111*f8a1b7d9SAlexander Kabaev
112*f8a1b7d9SAlexander Kabaev if (traits_type::eq_int_type(__c, __eof))
113*f8a1b7d9SAlexander Kabaev __err |= ios_base::eofbit;
114*f8a1b7d9SAlexander Kabaev }
115*f8a1b7d9SAlexander Kabaev catch(...)
116*f8a1b7d9SAlexander Kabaev { this->_M_setstate(ios_base::badbit); }
117*f8a1b7d9SAlexander Kabaev if (__err)
118*f8a1b7d9SAlexander Kabaev this->setstate(__err);
119*f8a1b7d9SAlexander Kabaev }
120*f8a1b7d9SAlexander Kabaev return *this;
121*f8a1b7d9SAlexander Kabaev }
122*f8a1b7d9SAlexander Kabaev
123*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_USE_WCHAR_T
124*f8a1b7d9SAlexander Kabaev template<>
125*f8a1b7d9SAlexander Kabaev basic_istream<wchar_t>&
126*f8a1b7d9SAlexander Kabaev basic_istream<wchar_t>::
ignore(streamsize __n)127*f8a1b7d9SAlexander Kabaev ignore(streamsize __n)
128*f8a1b7d9SAlexander Kabaev {
129*f8a1b7d9SAlexander Kabaev if (__n == 1)
130*f8a1b7d9SAlexander Kabaev return ignore();
131*f8a1b7d9SAlexander Kabaev
132*f8a1b7d9SAlexander Kabaev _M_gcount = 0;
133*f8a1b7d9SAlexander Kabaev sentry __cerb(*this, true);
134*f8a1b7d9SAlexander Kabaev if (__cerb && __n > 0)
135*f8a1b7d9SAlexander Kabaev {
136*f8a1b7d9SAlexander Kabaev ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
137*f8a1b7d9SAlexander Kabaev try
138*f8a1b7d9SAlexander Kabaev {
139*f8a1b7d9SAlexander Kabaev const int_type __eof = traits_type::eof();
140*f8a1b7d9SAlexander Kabaev __streambuf_type* __sb = this->rdbuf();
141*f8a1b7d9SAlexander Kabaev int_type __c = __sb->sgetc();
142*f8a1b7d9SAlexander Kabaev
143*f8a1b7d9SAlexander Kabaev bool __large_ignore = false;
144*f8a1b7d9SAlexander Kabaev while (true)
145*f8a1b7d9SAlexander Kabaev {
146*f8a1b7d9SAlexander Kabaev while (_M_gcount < __n
147*f8a1b7d9SAlexander Kabaev && !traits_type::eq_int_type(__c, __eof))
148*f8a1b7d9SAlexander Kabaev {
149*f8a1b7d9SAlexander Kabaev streamsize __size = std::min(streamsize(__sb->egptr()
150*f8a1b7d9SAlexander Kabaev - __sb->gptr()),
151*f8a1b7d9SAlexander Kabaev streamsize(__n - _M_gcount));
152*f8a1b7d9SAlexander Kabaev if (__size > 1)
153*f8a1b7d9SAlexander Kabaev {
154*f8a1b7d9SAlexander Kabaev __sb->gbump(__size);
155*f8a1b7d9SAlexander Kabaev _M_gcount += __size;
156*f8a1b7d9SAlexander Kabaev __c = __sb->sgetc();
157*f8a1b7d9SAlexander Kabaev }
158*f8a1b7d9SAlexander Kabaev else
159*f8a1b7d9SAlexander Kabaev {
160*f8a1b7d9SAlexander Kabaev ++_M_gcount;
161*f8a1b7d9SAlexander Kabaev __c = __sb->snextc();
162*f8a1b7d9SAlexander Kabaev }
163*f8a1b7d9SAlexander Kabaev }
164*f8a1b7d9SAlexander Kabaev if (__n == numeric_limits<streamsize>::max()
165*f8a1b7d9SAlexander Kabaev && !traits_type::eq_int_type(__c, __eof))
166*f8a1b7d9SAlexander Kabaev {
167*f8a1b7d9SAlexander Kabaev _M_gcount = numeric_limits<streamsize>::min();
168*f8a1b7d9SAlexander Kabaev __large_ignore = true;
169*f8a1b7d9SAlexander Kabaev }
170*f8a1b7d9SAlexander Kabaev else
171*f8a1b7d9SAlexander Kabaev break;
172*f8a1b7d9SAlexander Kabaev }
173*f8a1b7d9SAlexander Kabaev
174*f8a1b7d9SAlexander Kabaev if (__large_ignore)
175*f8a1b7d9SAlexander Kabaev _M_gcount = numeric_limits<streamsize>::max();
176*f8a1b7d9SAlexander Kabaev
177*f8a1b7d9SAlexander Kabaev if (traits_type::eq_int_type(__c, __eof))
178*f8a1b7d9SAlexander Kabaev __err |= ios_base::eofbit;
179*f8a1b7d9SAlexander Kabaev }
180*f8a1b7d9SAlexander Kabaev catch(...)
181*f8a1b7d9SAlexander Kabaev { this->_M_setstate(ios_base::badbit); }
182*f8a1b7d9SAlexander Kabaev if (__err)
183*f8a1b7d9SAlexander Kabaev this->setstate(__err);
184*f8a1b7d9SAlexander Kabaev }
185*f8a1b7d9SAlexander Kabaev return *this;
186*f8a1b7d9SAlexander Kabaev }
187*f8a1b7d9SAlexander Kabaev #endif
188*f8a1b7d9SAlexander Kabaev
189*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
190*f8a1b7d9SAlexander Kabaev
191*f8a1b7d9SAlexander Kabaev
192*f8a1b7d9SAlexander Kabaev // NB: These symbols renames should go into the shared library only,
193*f8a1b7d9SAlexander Kabaev // and only those shared libraries that support versioning.
194*f8a1b7d9SAlexander Kabaev #if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC)
195*f8a1b7d9SAlexander Kabaev
196*f8a1b7d9SAlexander Kabaev /* gcc-3.4.4
197*f8a1b7d9SAlexander Kabaev _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv
198*f8a1b7d9SAlexander Kabaev _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv
199*f8a1b7d9SAlexander Kabaev */
200*f8a1b7d9SAlexander Kabaev
201*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
202*f8a1b7d9SAlexander Kabaev
203*f8a1b7d9SAlexander Kabaev template
204*f8a1b7d9SAlexander Kabaev istreambuf_iterator<char>&
205*f8a1b7d9SAlexander Kabaev istreambuf_iterator<char>::operator++();
206*f8a1b7d9SAlexander Kabaev
207*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_USE_WCHAR_T
208*f8a1b7d9SAlexander Kabaev template
209*f8a1b7d9SAlexander Kabaev istreambuf_iterator<wchar_t>&
210*f8a1b7d9SAlexander Kabaev istreambuf_iterator<wchar_t>::operator++();
211*f8a1b7d9SAlexander Kabaev #endif
212*f8a1b7d9SAlexander Kabaev
213*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
214*f8a1b7d9SAlexander Kabaev
215*f8a1b7d9SAlexander Kabaev
216*f8a1b7d9SAlexander Kabaev /* gcc-4.0.0
217*f8a1b7d9SAlexander Kabaev _ZNSs4_Rep26_M_set_length_and_sharableEj
218*f8a1b7d9SAlexander Kabaev _ZNSs7_M_copyEPcPKcj
219*f8a1b7d9SAlexander Kabaev _ZNSs7_M_moveEPcPKcj
220*f8a1b7d9SAlexander Kabaev _ZNSs9_M_assignEPcjc
221*f8a1b7d9SAlexander Kabaev _ZNKSs11_M_disjunctEPKc
222*f8a1b7d9SAlexander Kabaev _ZNKSs15_M_check_lengthEjjPKc
223*f8a1b7d9SAlexander Kabaev _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj
224*f8a1b7d9SAlexander Kabaev _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj
225*f8a1b7d9SAlexander Kabaev _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj
226*f8a1b7d9SAlexander Kabaev _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw
227*f8a1b7d9SAlexander Kabaev _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw
228*f8a1b7d9SAlexander Kabaev _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc
229*f8a1b7d9SAlexander Kabaev
230*f8a1b7d9SAlexander Kabaev _ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
231*f8a1b7d9SAlexander Kabaev _ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv
232*f8a1b7d9SAlexander Kabaev _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv
233*f8a1b7d9SAlexander Kabaev _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv
234*f8a1b7d9SAlexander Kabaev _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv
235*f8a1b7d9SAlexander Kabaev _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv
236*f8a1b7d9SAlexander Kabaev
237*f8a1b7d9SAlexander Kabaev _ZNSi6ignoreEi
238*f8a1b7d9SAlexander Kabaev _ZNSi6ignoreEv
239*f8a1b7d9SAlexander Kabaev _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi
240*f8a1b7d9SAlexander Kabaev _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv
241*f8a1b7d9SAlexander Kabaev
242*f8a1b7d9SAlexander Kabaev _ZNSt11char_traitsIcE2eqERKcS2_
243*f8a1b7d9SAlexander Kabaev _ZNSt11char_traitsIwE2eqERKwS2_
244*f8a1b7d9SAlexander Kabaev */
245*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
246*f8a1b7d9SAlexander Kabaev
247*f8a1b7d9SAlexander Kabaev // std::char_traits is explicitly specialized
248*f8a1b7d9SAlexander Kabaev bool (* __p1)(const char&, const char&) = &char_traits<char>::eq;
249*f8a1b7d9SAlexander Kabaev
250*f8a1b7d9SAlexander Kabaev // std::string
251*f8a1b7d9SAlexander Kabaev template
252*f8a1b7d9SAlexander Kabaev void
253*f8a1b7d9SAlexander Kabaev basic_string<char>::_M_copy(char*, const char*, size_t);
254*f8a1b7d9SAlexander Kabaev
255*f8a1b7d9SAlexander Kabaev template
256*f8a1b7d9SAlexander Kabaev void
257*f8a1b7d9SAlexander Kabaev basic_string<char>::_M_move(char*, const char*, size_t);
258*f8a1b7d9SAlexander Kabaev
259*f8a1b7d9SAlexander Kabaev template
260*f8a1b7d9SAlexander Kabaev void
261*f8a1b7d9SAlexander Kabaev basic_string<char>::_M_assign(char*, size_t, char);
262*f8a1b7d9SAlexander Kabaev
263*f8a1b7d9SAlexander Kabaev template
264*f8a1b7d9SAlexander Kabaev bool
265*f8a1b7d9SAlexander Kabaev basic_string<char>::_M_disjunct(const char*) const;
266*f8a1b7d9SAlexander Kabaev
267*f8a1b7d9SAlexander Kabaev template
268*f8a1b7d9SAlexander Kabaev void
269*f8a1b7d9SAlexander Kabaev basic_string<char>::_M_check_length(size_t, size_t, const char*) const;
270*f8a1b7d9SAlexander Kabaev
271*f8a1b7d9SAlexander Kabaev template
272*f8a1b7d9SAlexander Kabaev void
273*f8a1b7d9SAlexander Kabaev basic_string<char>::_Rep::_M_set_length_and_sharable(size_t);
274*f8a1b7d9SAlexander Kabaev
275*f8a1b7d9SAlexander Kabaev
276*f8a1b7d9SAlexander Kabaev // std::istream
277*f8a1b7d9SAlexander Kabaev template
278*f8a1b7d9SAlexander Kabaev basic_istream<char>&
279*f8a1b7d9SAlexander Kabaev basic_istream<char>::ignore();
280*f8a1b7d9SAlexander Kabaev
281*f8a1b7d9SAlexander Kabaev template
282*f8a1b7d9SAlexander Kabaev bool
283*f8a1b7d9SAlexander Kabaev basic_fstream<char>::is_open() const;
284*f8a1b7d9SAlexander Kabaev
285*f8a1b7d9SAlexander Kabaev template
286*f8a1b7d9SAlexander Kabaev bool
287*f8a1b7d9SAlexander Kabaev basic_ifstream<char>::is_open() const;
288*f8a1b7d9SAlexander Kabaev
289*f8a1b7d9SAlexander Kabaev template
290*f8a1b7d9SAlexander Kabaev bool
291*f8a1b7d9SAlexander Kabaev basic_ofstream<char>::is_open() const;
292*f8a1b7d9SAlexander Kabaev
293*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_USE_WCHAR_T
294*f8a1b7d9SAlexander Kabaev bool (* __p2)(const wchar_t&, const wchar_t&) = &char_traits<wchar_t>::eq;
295*f8a1b7d9SAlexander Kabaev
296*f8a1b7d9SAlexander Kabaev // std::wstring
297*f8a1b7d9SAlexander Kabaev template
298*f8a1b7d9SAlexander Kabaev void
299*f8a1b7d9SAlexander Kabaev basic_string<wchar_t>::_M_copy(wchar_t*, const wchar_t*, size_t);
300*f8a1b7d9SAlexander Kabaev
301*f8a1b7d9SAlexander Kabaev template
302*f8a1b7d9SAlexander Kabaev void
303*f8a1b7d9SAlexander Kabaev basic_string<wchar_t>::_M_move(wchar_t*, const wchar_t*, size_t);
304*f8a1b7d9SAlexander Kabaev
305*f8a1b7d9SAlexander Kabaev template
306*f8a1b7d9SAlexander Kabaev void
307*f8a1b7d9SAlexander Kabaev basic_string<wchar_t>::_M_assign(wchar_t*, size_t, wchar_t);
308*f8a1b7d9SAlexander Kabaev
309*f8a1b7d9SAlexander Kabaev template
310*f8a1b7d9SAlexander Kabaev bool
311*f8a1b7d9SAlexander Kabaev basic_string<wchar_t>::_M_disjunct(const wchar_t*) const;
312*f8a1b7d9SAlexander Kabaev
313*f8a1b7d9SAlexander Kabaev template
314*f8a1b7d9SAlexander Kabaev void
315*f8a1b7d9SAlexander Kabaev basic_string<wchar_t>::_M_check_length(size_t, size_t,
316*f8a1b7d9SAlexander Kabaev const char*) const;
317*f8a1b7d9SAlexander Kabaev
318*f8a1b7d9SAlexander Kabaev template
319*f8a1b7d9SAlexander Kabaev void
320*f8a1b7d9SAlexander Kabaev basic_string<wchar_t>::_Rep::_M_set_length_and_sharable(size_t);
321*f8a1b7d9SAlexander Kabaev
322*f8a1b7d9SAlexander Kabaev template
323*f8a1b7d9SAlexander Kabaev basic_istream<wchar_t>&
324*f8a1b7d9SAlexander Kabaev basic_istream<wchar_t>::ignore();
325*f8a1b7d9SAlexander Kabaev
326*f8a1b7d9SAlexander Kabaev template
327*f8a1b7d9SAlexander Kabaev bool
328*f8a1b7d9SAlexander Kabaev basic_fstream<wchar_t>::is_open() const;
329*f8a1b7d9SAlexander Kabaev
330*f8a1b7d9SAlexander Kabaev template
331*f8a1b7d9SAlexander Kabaev bool
332*f8a1b7d9SAlexander Kabaev basic_ifstream<wchar_t>::is_open() const;
333*f8a1b7d9SAlexander Kabaev
334*f8a1b7d9SAlexander Kabaev template
335*f8a1b7d9SAlexander Kabaev bool
336*f8a1b7d9SAlexander Kabaev basic_ofstream<wchar_t>::is_open() const;
337*f8a1b7d9SAlexander Kabaev #endif
338*f8a1b7d9SAlexander Kabaev
339*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
340*f8a1b7d9SAlexander Kabaev
341*f8a1b7d9SAlexander Kabaev // The rename syntax for default exported names is
342*f8a1b7d9SAlexander Kabaev // asm (".symver name1,exportedname@GLIBCXX_3.4")
343*f8a1b7d9SAlexander Kabaev // asm (".symver name2,exportedname@@GLIBCXX_3.4.5")
344*f8a1b7d9SAlexander Kabaev // In the future, GLIBCXX_ABI > 6 should remove all uses of
345*f8a1b7d9SAlexander Kabaev // _GLIBCXX_*_SYMVER macros in this file.
346*f8a1b7d9SAlexander Kabaev
347*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_3_4_SYMVER(XXname, name) \
348*f8a1b7d9SAlexander Kabaev extern "C" void \
349*f8a1b7d9SAlexander Kabaev _X##name() \
350*f8a1b7d9SAlexander Kabaev __attribute__ ((alias(#XXname))); \
351*f8a1b7d9SAlexander Kabaev asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4");
352*f8a1b7d9SAlexander Kabaev
353*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_3_4_5_SYMVER(XXname, name) \
354*f8a1b7d9SAlexander Kabaev extern "C" void \
355*f8a1b7d9SAlexander Kabaev _Y##name() \
356*f8a1b7d9SAlexander Kabaev __attribute__ ((alias(#XXname))); \
357*f8a1b7d9SAlexander Kabaev asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.5");
358*f8a1b7d9SAlexander Kabaev
359*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_ASM_SYMVER(cur, old, version) \
360*f8a1b7d9SAlexander Kabaev asm (".symver " #cur "," #old "@@" #version);
361*f8a1b7d9SAlexander Kabaev
362*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_SYMVER
363*f8a1b7d9SAlexander Kabaev #include <bits/compatibility.h>
364*f8a1b7d9SAlexander Kabaev #undef _GLIBCXX_APPLY_SYMVER
365*f8a1b7d9SAlexander Kabaev
366*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER
367*f8a1b7d9SAlexander Kabaev #include <bits/compatibility.h>
368*f8a1b7d9SAlexander Kabaev #undef _GLIBCXX_APPLY_SYMVER
369*f8a1b7d9SAlexander Kabaev
370*f8a1b7d9SAlexander Kabaev
371*f8a1b7d9SAlexander Kabaev /* gcc-3.4.0
372*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base4hookEPS0_;
373*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base4swapERS0_S1_;
374*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base6unhookEv;
375*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base7reverseEv;
376*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base8transferEPS0_S1_;
377*f8a1b7d9SAlexander Kabaev */
378*f8a1b7d9SAlexander Kabaev #include "list.cc"
379*f8a1b7d9SAlexander Kabaev _GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX4hookEPS_, \
380*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base4hookEPS0_, \
381*f8a1b7d9SAlexander Kabaev GLIBCXX_3.4)
382*f8a1b7d9SAlexander Kabaev
383*f8a1b7d9SAlexander Kabaev _GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX4swapERS_S0_, \
384*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base4swapERS0_S1_, \
385*f8a1b7d9SAlexander Kabaev GLIBCXX_3.4)
386*f8a1b7d9SAlexander Kabaev
387*f8a1b7d9SAlexander Kabaev _GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX6unhookEv, \
388*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base6unhookEv, \
389*f8a1b7d9SAlexander Kabaev GLIBCXX_3.4)
390*f8a1b7d9SAlexander Kabaev
391*f8a1b7d9SAlexander Kabaev _GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX7reverseEv, \
392*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base7reverseEv, \
393*f8a1b7d9SAlexander Kabaev GLIBCXX_3.4)
394*f8a1b7d9SAlexander Kabaev
395*f8a1b7d9SAlexander Kabaev _GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX8transferEPS_S0_, \
396*f8a1b7d9SAlexander Kabaev _ZN10__gnu_norm15_List_node_base8transferEPS0_S1_, \
397*f8a1b7d9SAlexander Kabaev GLIBCXX_3.4)
398*f8a1b7d9SAlexander Kabaev #undef _List_node_base
399*f8a1b7d9SAlexander Kabaev
400*f8a1b7d9SAlexander Kabaev // gcc-4.1.0
401*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
402*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \
403*f8a1b7d9SAlexander Kabaev extern "C" double \
404*f8a1b7d9SAlexander Kabaev __ ## name ## l_wrapper argdecl \
405*f8a1b7d9SAlexander Kabaev { \
406*f8a1b7d9SAlexander Kabaev return name args; \
407*f8a1b7d9SAlexander Kabaev } \
408*f8a1b7d9SAlexander Kabaev asm (".symver __" #name "l_wrapper, " #name "l@" #ver)
409*f8a1b7d9SAlexander Kabaev
410*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_MATHL_WRAPPER1(name, ver) \
411*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver)
412*f8a1b7d9SAlexander Kabaev
413*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_MATHL_WRAPPER2(name, ver) \
414*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver)
415*f8a1b7d9SAlexander Kabaev
416*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_ACOSL
417*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3);
418*f8a1b7d9SAlexander Kabaev #endif
419*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_ASINL
420*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3);
421*f8a1b7d9SAlexander Kabaev #endif
422*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_ATAN2L
423*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4);
424*f8a1b7d9SAlexander Kabaev #endif
425*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_ATANL
426*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3);
427*f8a1b7d9SAlexander Kabaev #endif
428*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_CEILL
429*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3);
430*f8a1b7d9SAlexander Kabaev #endif
431*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_COSHL
432*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4);
433*f8a1b7d9SAlexander Kabaev #endif
434*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_COSL
435*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4);
436*f8a1b7d9SAlexander Kabaev #endif
437*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_EXPL
438*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4);
439*f8a1b7d9SAlexander Kabaev #endif
440*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_FLOORL
441*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3);
442*f8a1b7d9SAlexander Kabaev #endif
443*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_FMODL
444*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3);
445*f8a1b7d9SAlexander Kabaev #endif
446*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_FREXPL
447*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3);
448*f8a1b7d9SAlexander Kabaev #endif
449*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_HYPOTL
450*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4);
451*f8a1b7d9SAlexander Kabaev #endif
452*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_LDEXPL
453*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3);
454*f8a1b7d9SAlexander Kabaev #endif
455*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_LOG10L
456*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4);
457*f8a1b7d9SAlexander Kabaev #endif
458*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_LOGL
459*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4);
460*f8a1b7d9SAlexander Kabaev #endif
461*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_MODFL
462*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3);
463*f8a1b7d9SAlexander Kabaev #endif
464*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_POWL
465*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4);
466*f8a1b7d9SAlexander Kabaev #endif
467*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_SINHL
468*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4);
469*f8a1b7d9SAlexander Kabaev #endif
470*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_SINL
471*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4);
472*f8a1b7d9SAlexander Kabaev #endif
473*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_SQRTL
474*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4);
475*f8a1b7d9SAlexander Kabaev #endif
476*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_TANHL
477*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4);
478*f8a1b7d9SAlexander Kabaev #endif
479*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_HAVE_TANL
480*f8a1b7d9SAlexander Kabaev _GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4);
481*f8a1b7d9SAlexander Kabaev #endif
482*f8a1b7d9SAlexander Kabaev #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
483*f8a1b7d9SAlexander Kabaev
484*f8a1b7d9SAlexander Kabaev #endif
485*f8a1b7d9SAlexander Kabaev
486*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
487*f8a1b7d9SAlexander Kabaev extern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[];
488*f8a1b7d9SAlexander Kabaev extern void *_ZTVN10__cxxabiv119__pointer_type_infoE[];
489*f8a1b7d9SAlexander Kabaev extern __attribute__((used, weak)) const char _ZTSe[2] = "e";
490*f8a1b7d9SAlexander Kabaev extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
491*f8a1b7d9SAlexander Kabaev extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
492*f8a1b7d9SAlexander Kabaev extern __attribute__((used, weak)) const void *_ZTIe[2]
493*f8a1b7d9SAlexander Kabaev = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
494*f8a1b7d9SAlexander Kabaev (void *) _ZTSe };
495*f8a1b7d9SAlexander Kabaev extern __attribute__((used, weak)) const void *_ZTIPe[4]
496*f8a1b7d9SAlexander Kabaev = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
497*f8a1b7d9SAlexander Kabaev (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
498*f8a1b7d9SAlexander Kabaev extern __attribute__((used, weak)) const void *_ZTIPKe[4]
499*f8a1b7d9SAlexander Kabaev = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
500*f8a1b7d9SAlexander Kabaev (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
501*f8a1b7d9SAlexander Kabaev #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
502*f8a1b7d9SAlexander Kabaev
503*f8a1b7d9SAlexander Kabaev
504*f8a1b7d9SAlexander Kabaev
505*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_SYMVER_DARWIN
506*f8a1b7d9SAlexander Kabaev #if (defined(__ppc__) || defined(__ppc64__)) && defined(PIC)
507*f8a1b7d9SAlexander Kabaev /* __eprintf shouldn't have been made visible from libstdc++, or
508*f8a1b7d9SAlexander Kabaev anywhere, but on Mac OS X 10.4 it was defined in
509*f8a1b7d9SAlexander Kabaev libstdc++.6.0.3.dylib; so on that platform we have to keep defining
510*f8a1b7d9SAlexander Kabaev it to keep binary compatibility. We can't just put the libgcc
511*f8a1b7d9SAlexander Kabaev version in the export list, because that doesn't work; once a
512*f8a1b7d9SAlexander Kabaev symbol is marked as hidden, it stays that way. */
513*f8a1b7d9SAlexander Kabaev
514*f8a1b7d9SAlexander Kabaev #include <cstdio>
515*f8a1b7d9SAlexander Kabaev #include <cstdlib>
516*f8a1b7d9SAlexander Kabaev
517*f8a1b7d9SAlexander Kabaev using namespace std;
518*f8a1b7d9SAlexander Kabaev
519*f8a1b7d9SAlexander Kabaev extern "C" void
__eprintf(const char * string,const char * expression,unsigned int line,const char * filename)520*f8a1b7d9SAlexander Kabaev __eprintf(const char *string, const char *expression,
521*f8a1b7d9SAlexander Kabaev unsigned int line, const char *filename)
522*f8a1b7d9SAlexander Kabaev {
523*f8a1b7d9SAlexander Kabaev fprintf(stderr, string, expression, line, filename);
524*f8a1b7d9SAlexander Kabaev fflush(stderr);
525*f8a1b7d9SAlexander Kabaev abort();
526*f8a1b7d9SAlexander Kabaev }
527*f8a1b7d9SAlexander Kabaev #endif
528*f8a1b7d9SAlexander Kabaev #endif
529