197403Sobrien// Locale support -*- C++ -*-
297403Sobrien
3169691Skan// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
4132720Skan// Free Software Foundation, Inc.
597403Sobrien//
697403Sobrien// This file is part of the GNU ISO C++ Library.  This library is free
797403Sobrien// software; you can redistribute it and/or modify it under the
897403Sobrien// terms of the GNU General Public License as published by the
997403Sobrien// Free Software Foundation; either version 2, or (at your option)
1097403Sobrien// any later version.
1197403Sobrien
1297403Sobrien// This library is distributed in the hope that it will be useful,
1397403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1497403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1597403Sobrien// GNU General Public License for more details.
1697403Sobrien
1797403Sobrien// You should have received a copy of the GNU General Public License along
1897403Sobrien// with this library; see the file COPYING.  If not, write to the Free
19169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
2097403Sobrien// USA.
2197403Sobrien
2297403Sobrien// As a special exception, you may use this file as part of a free software
2397403Sobrien// library without restriction.  Specifically, if other files instantiate
2497403Sobrien// templates or use macros or inline functions from this file, or you compile
2597403Sobrien// this file and link it with other files to produce an executable, this
2697403Sobrien// file does not by itself cause the resulting executable to be covered by
2797403Sobrien// the GNU General Public License.  This exception does not however
2897403Sobrien// invalidate any other reasons why the executable file might be covered by
2997403Sobrien// the GNU General Public License.
3097403Sobrien
3197403Sobrien//
3297403Sobrien// ISO C++ 14882: 22.1  Locales
3397403Sobrien//
3497403Sobrien
3597403Sobrien#include <locale>
3697403Sobrien
37132720Skan// Instantiation configuration.
38132720Skan#ifndef C
39132720Skan# define C char
40169691Skan# define C_is_char
41132720Skan#endif
42132720Skan
43169691Skan_GLIBCXX_BEGIN_NAMESPACE(std)
44169691Skan
4597403Sobrien  // moneypunct, money_get, and money_put
46132720Skan  template class moneypunct<C, false>;
47132720Skan  template class moneypunct<C, true>;
48132720Skan  template struct __moneypunct_cache<C, false>;
49132720Skan  template struct __moneypunct_cache<C, true>;
50132720Skan  template class moneypunct_byname<C, false>;
51132720Skan  template class moneypunct_byname<C, true>;
52169691Skan_GLIBCXX_BEGIN_LDBL_NAMESPACE
53132720Skan  template class money_get<C, istreambuf_iterator<C> >;
54132720Skan  template class money_put<C, ostreambuf_iterator<C> >;
5597403Sobrien  template
56132720Skan    istreambuf_iterator<C>
57132720Skan    money_get<C, istreambuf_iterator<C> >::
58132720Skan    _M_extract<true>(istreambuf_iterator<C>, istreambuf_iterator<C>,
59132720Skan		     ios_base&, ios_base::iostate&, string&) const;
6097403Sobrien
6197403Sobrien  template
62132720Skan    istreambuf_iterator<C>
63132720Skan    money_get<C, istreambuf_iterator<C> >::
64132720Skan    _M_extract<false>(istreambuf_iterator<C>, istreambuf_iterator<C>,
65132720Skan		      ios_base&, ios_base::iostate&, string&) const;
6697403Sobrien
6797403Sobrien  template
68132720Skan    ostreambuf_iterator<C>
69132720Skan    money_put<C, ostreambuf_iterator<C> >::
70132720Skan    _M_insert<true>(ostreambuf_iterator<C>, ios_base&, C,
71132720Skan		    const string_type&) const;
7297403Sobrien
7397403Sobrien  template
74132720Skan    ostreambuf_iterator<C>
75132720Skan    money_put<C, ostreambuf_iterator<C> >::
76132720Skan    _M_insert<false>(ostreambuf_iterator<C>, ios_base&, C,
77132720Skan		     const string_type&) const;
78169691Skan_GLIBCXX_END_LDBL_NAMESPACE
7997403Sobrien
80132720Skan  // numpunct, numpunct_byname, num_get, and num_put
81132720Skan  template class numpunct<C>;
82132720Skan  template struct __numpunct_cache<C>;
83132720Skan  template class numpunct_byname<C>;
84169691Skan_GLIBCXX_BEGIN_LDBL_NAMESPACE
85132720Skan  template class num_get<C, istreambuf_iterator<C> >;
86132720Skan  template class num_put<C, ostreambuf_iterator<C> >;
8797403Sobrien  template
88132720Skan    istreambuf_iterator<C>
89132720Skan    num_get<C, istreambuf_iterator<C> >::
90132720Skan    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
91132720Skan		   ios_base&, ios_base::iostate&,
92132720Skan		   long&) const;
9397403Sobrien
9497403Sobrien  template
95132720Skan    istreambuf_iterator<C>
96132720Skan    num_get<C, istreambuf_iterator<C> >::
97132720Skan    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
98132720Skan		   ios_base&, ios_base::iostate&,
99132720Skan		   unsigned short&) const;
10097403Sobrien
10197403Sobrien  template
102132720Skan    istreambuf_iterator<C>
103132720Skan    num_get<C, istreambuf_iterator<C> >::
104132720Skan    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
105132720Skan		   ios_base&, ios_base::iostate&,
106132720Skan		   unsigned int&) const;
10797403Sobrien
10897403Sobrien  template
109132720Skan    istreambuf_iterator<C>
110132720Skan    num_get<C, istreambuf_iterator<C> >::
111132720Skan    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
112132720Skan		   ios_base&, ios_base::iostate&,
113132720Skan		   unsigned long&) const;
11497403Sobrien
115132720Skan#ifdef _GLIBCXX_USE_LONG_LONG
11697403Sobrien  template
117132720Skan    istreambuf_iterator<C>
118132720Skan    num_get<C, istreambuf_iterator<C> >::
119132720Skan    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
120132720Skan		   ios_base&, ios_base::iostate&,
121132720Skan		   long long&) const;
12297403Sobrien
12397403Sobrien  template
124132720Skan    istreambuf_iterator<C>
125132720Skan    num_get<C, istreambuf_iterator<C> >::
126132720Skan    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
127132720Skan		   ios_base&, ios_base::iostate&,
128132720Skan		   unsigned long long&) const;
12997403Sobrien#endif
13097403Sobrien
13197403Sobrien  template
132132720Skan    ostreambuf_iterator<C>
133132720Skan    num_put<C, ostreambuf_iterator<C> >::
134132720Skan    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
135132720Skan		  long) const;
13697403Sobrien
13797403Sobrien  template
138132720Skan    ostreambuf_iterator<C>
139132720Skan    num_put<C, ostreambuf_iterator<C> >::
140132720Skan    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
141132720Skan		  unsigned long) const;
14297403Sobrien
143132720Skan#ifdef _GLIBCXX_USE_LONG_LONG
144117397Skan  template
145132720Skan    ostreambuf_iterator<C>
146132720Skan    num_put<C, ostreambuf_iterator<C> >::
147132720Skan    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
148132720Skan		  long long) const;
149117397Skan
150117397Skan  template
151132720Skan    ostreambuf_iterator<C>
152132720Skan    num_put<C, ostreambuf_iterator<C> >::
153132720Skan    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
154132720Skan		  unsigned long long) const;
155117397Skan#endif
156117397Skan
157117397Skan  template
158132720Skan    ostreambuf_iterator<C>
159132720Skan    num_put<C, ostreambuf_iterator<C> >::
160132720Skan    _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char,
161132720Skan		    double) const;
162117397Skan
163117397Skan  template
164132720Skan    ostreambuf_iterator<C>
165132720Skan    num_put<C, ostreambuf_iterator<C> >::
166132720Skan    _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char,
167132720Skan		    long double) const;
168169691Skan_GLIBCXX_END_LDBL_NAMESPACE
169169691Skan
17097403Sobrien  // time_get and time_put
171132720Skan  template class __timepunct<C>;
172132720Skan  template struct __timepunct_cache<C>;
173132720Skan  template class time_put<C, ostreambuf_iterator<C> >;
174132720Skan  template class time_put_byname<C, ostreambuf_iterator<C> >;
175132720Skan  template class time_get<C, istreambuf_iterator<C> >;
176132720Skan  template class time_get_byname<C, istreambuf_iterator<C> >;
17797403Sobrien
17897403Sobrien  // messages
179132720Skan  template class messages<C>;
180132720Skan  template class messages_byname<C>;
18197403Sobrien
18297403Sobrien  // ctype
183211755Srpaulo  template class __ctype_abstract_base<C>;
184132720Skan  template class ctype_byname<C>;
18597403Sobrien
18697403Sobrien  // codecvt
187211755Srpaulo  template class __codecvt_abstract_base<C, char, mbstate_t>;
188132720Skan  template class codecvt_byname<C, char, mbstate_t>;
18997403Sobrien
19097403Sobrien  // collate
191132720Skan  template class collate<C>;
192132720Skan  template class collate_byname<C>;
19397403Sobrien
19497403Sobrien  // use_facet
19597403Sobrien  // NB: use_facet<ctype> is specialized
19697403Sobrien  template
197132720Skan    const codecvt<C, char, mbstate_t>&
198132720Skan    use_facet<codecvt<C, char, mbstate_t> >(const locale&);
19997403Sobrien
20097403Sobrien  template
201132720Skan    const collate<C>&
202132720Skan    use_facet<collate<C> >(const locale&);
20397403Sobrien
20497403Sobrien  template
205132720Skan    const numpunct<C>&
206132720Skan    use_facet<numpunct<C> >(const locale&);
20797403Sobrien
20897403Sobrien  template
209132720Skan    const num_put<C>&
210132720Skan    use_facet<num_put<C> >(const locale&);
21197403Sobrien
21297403Sobrien  template
213132720Skan    const num_get<C>&
214132720Skan    use_facet<num_get<C> >(const locale&);
21597403Sobrien
21697403Sobrien  template
217132720Skan    const moneypunct<C, true>&
218132720Skan    use_facet<moneypunct<C, true> >(const locale&);
21997403Sobrien
22097403Sobrien  template
221132720Skan    const moneypunct<C, false>&
222132720Skan    use_facet<moneypunct<C, false> >(const locale&);
22397403Sobrien
22497403Sobrien  template
225132720Skan    const money_put<C>&
226132720Skan    use_facet<money_put<C> >(const locale&);
22797403Sobrien
22897403Sobrien  template
229132720Skan    const money_get<C>&
230132720Skan    use_facet<money_get<C> >(const locale&);
23197403Sobrien
23297403Sobrien  template
233132720Skan    const __timepunct<C>&
234132720Skan    use_facet<__timepunct<C> >(const locale&);
23597403Sobrien
23697403Sobrien  template
237132720Skan    const time_put<C>&
238132720Skan    use_facet<time_put<C> >(const locale&);
23997403Sobrien
24097403Sobrien  template
241132720Skan    const time_get<C>&
242132720Skan    use_facet<time_get<C> >(const locale&);
24397403Sobrien
24497403Sobrien  template
245132720Skan    const messages<C>&
246132720Skan    use_facet<messages<C> >(const locale&);
24797403Sobrien
24897403Sobrien  // has_facet
24997403Sobrien  template
25097403Sobrien    bool
251132720Skan    has_facet<ctype<C> >(const locale&);
25297403Sobrien
25397403Sobrien  template
25497403Sobrien    bool
255132720Skan    has_facet<codecvt<C, char, mbstate_t> >(const locale&);
25697403Sobrien
25797403Sobrien  template
25897403Sobrien    bool
259132720Skan    has_facet<collate<C> >(const locale&);
26097403Sobrien
26197403Sobrien  template
26297403Sobrien    bool
263132720Skan    has_facet<numpunct<C> >(const locale&);
26497403Sobrien
26597403Sobrien  template
26697403Sobrien    bool
267132720Skan    has_facet<num_put<C> >(const locale&);
26897403Sobrien
26997403Sobrien  template
27097403Sobrien    bool
271132720Skan    has_facet<num_get<C> >(const locale&);
27297403Sobrien
27397403Sobrien  template
27497403Sobrien    bool
275132720Skan    has_facet<moneypunct<C> >(const locale&);
27697403Sobrien
27797403Sobrien  template
27897403Sobrien    bool
279132720Skan    has_facet<money_put<C> >(const locale&);
28097403Sobrien
28197403Sobrien  template
28297403Sobrien    bool
283132720Skan    has_facet<money_get<C> >(const locale&);
28497403Sobrien
28597403Sobrien  template
28697403Sobrien    bool
287132720Skan    has_facet<__timepunct<C> >(const locale&);
28897403Sobrien
28997403Sobrien  template
29097403Sobrien    bool
291132720Skan    has_facet<time_put<C> >(const locale&);
29297403Sobrien
29397403Sobrien  template
29497403Sobrien    bool
295132720Skan    has_facet<time_get<C> >(const locale&);
29697403Sobrien
29797403Sobrien  template
29897403Sobrien    bool
299132720Skan    has_facet<messages<C> >(const locale&);
30097403Sobrien
30197403Sobrien
302132720Skan  // locale functions.
303117397Skan  template
304132720Skan    C*
305132720Skan    __add_grouping<C>(C*, C, char const*, size_t,
306132720Skan			 C const*, C const*);
307117397Skan
308132720Skan  template class __pad<C, char_traits<C> >;
309117397Skan
31097403Sobrien  template
31197403Sobrien    int
312132720Skan    __int_to_char(C*, unsigned long, const C*,
313117397Skan		  ios_base::fmtflags, bool);
314117397Skan
315132720Skan#ifdef _GLIBCXX_USE_LONG_LONG
316117397Skan  template
317117397Skan    int
318132720Skan    __int_to_char(C*, unsigned long long, const C*,
319117397Skan		  ios_base::fmtflags, bool);
320117397Skan#endif
321169691Skan
322169691Skan_GLIBCXX_END_NAMESPACE
323169691Skan
324169691Skan// XXX GLIBCXX_ABI Deprecated
325169691Skan#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined C_is_char
326169691Skan
327169691Skan#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
328169691Skan  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
329169691Skan
330169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
331169691Skan		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
332169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
333169691Skan		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
334169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
335169691Skan		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
336169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
337169691Skan		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
338169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
339169691Skan		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
340169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
341169691Skan		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
342169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_,
343169691Skan		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_);
344169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_,
345169691Skan		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_);
346169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_,
347169691Skan		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_);
348169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_,
349169691Skan		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_);
350169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_,
351169691Skan		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_);
352169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_,
353169691Skan		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_);
354169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
355169691Skan		     _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
356169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
357169691Skan		     _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
358169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs,
359169691Skan		     _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs);
360169691Skan_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs,
361169691Skan		     _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs);
362169691Skan
363169691Skan#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
364