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