locale-inst.cc revision 132720
1// Locale support -*- C++ -*-
2
3// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
4// Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING.  If not, write to the Free
19// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20// USA.
21
22// As a special exception, you may use this file as part of a free software
23// library without restriction.  Specifically, if other files instantiate
24// templates or use macros or inline functions from this file, or you compile
25// this file and link it with other files to produce an executable, this
26// file does not by itself cause the resulting executable to be covered by
27// the GNU General Public License.  This exception does not however
28// invalidate any other reasons why the executable file might be covered by
29// the GNU General Public License.
30
31//
32// ISO C++ 14882: 22.1  Locales
33//
34
35#include <locale>
36
37// Instantiation configuration.
38#ifndef C
39# define C char
40#endif
41
42namespace std
43{
44  // moneypunct, money_get, and money_put
45  template class moneypunct<C, false>;
46  template class moneypunct<C, true>;
47  template struct __moneypunct_cache<C, false>;
48  template struct __moneypunct_cache<C, true>;
49  template class moneypunct_byname<C, false>;
50  template class moneypunct_byname<C, true>;
51  template class money_get<C, istreambuf_iterator<C> >;
52  template class money_put<C, ostreambuf_iterator<C> >;
53  template
54    istreambuf_iterator<C>
55    money_get<C, istreambuf_iterator<C> >::
56    _M_extract<true>(istreambuf_iterator<C>, istreambuf_iterator<C>,
57		     ios_base&, ios_base::iostate&, string&) const;
58
59  template
60    istreambuf_iterator<C>
61    money_get<C, istreambuf_iterator<C> >::
62    _M_extract<false>(istreambuf_iterator<C>, istreambuf_iterator<C>,
63		      ios_base&, ios_base::iostate&, string&) const;
64
65  template
66    ostreambuf_iterator<C>
67    money_put<C, ostreambuf_iterator<C> >::
68    _M_insert<true>(ostreambuf_iterator<C>, ios_base&, C,
69		    const string_type&) const;
70
71  template
72    ostreambuf_iterator<C>
73    money_put<C, ostreambuf_iterator<C> >::
74    _M_insert<false>(ostreambuf_iterator<C>, ios_base&, C,
75		     const string_type&) const;
76
77  // numpunct, numpunct_byname, num_get, and num_put
78  template class numpunct<C>;
79  template struct __numpunct_cache<C>;
80  template class numpunct_byname<C>;
81  template class num_get<C, istreambuf_iterator<C> >;
82  template class num_put<C, ostreambuf_iterator<C> >;
83  template
84    istreambuf_iterator<C>
85    num_get<C, istreambuf_iterator<C> >::
86    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
87		   ios_base&, ios_base::iostate&,
88		   long&) const;
89
90  template
91    istreambuf_iterator<C>
92    num_get<C, istreambuf_iterator<C> >::
93    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
94		   ios_base&, ios_base::iostate&,
95		   unsigned short&) const;
96
97  template
98    istreambuf_iterator<C>
99    num_get<C, istreambuf_iterator<C> >::
100    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
101		   ios_base&, ios_base::iostate&,
102		   unsigned int&) const;
103
104  template
105    istreambuf_iterator<C>
106    num_get<C, istreambuf_iterator<C> >::
107    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
108		   ios_base&, ios_base::iostate&,
109		   unsigned long&) const;
110
111#ifdef _GLIBCXX_USE_LONG_LONG
112  template
113    istreambuf_iterator<C>
114    num_get<C, istreambuf_iterator<C> >::
115    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
116		   ios_base&, ios_base::iostate&,
117		   long long&) const;
118
119  template
120    istreambuf_iterator<C>
121    num_get<C, istreambuf_iterator<C> >::
122    _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>,
123		   ios_base&, ios_base::iostate&,
124		   unsigned long long&) const;
125#endif
126
127  template
128    ostreambuf_iterator<C>
129    num_put<C, ostreambuf_iterator<C> >::
130    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
131		  long) const;
132
133  template
134    ostreambuf_iterator<C>
135    num_put<C, ostreambuf_iterator<C> >::
136    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
137		  unsigned long) const;
138
139#ifdef _GLIBCXX_USE_LONG_LONG
140  template
141    ostreambuf_iterator<C>
142    num_put<C, ostreambuf_iterator<C> >::
143    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
144		  long long) const;
145
146  template
147    ostreambuf_iterator<C>
148    num_put<C, ostreambuf_iterator<C> >::
149    _M_insert_int(ostreambuf_iterator<C>, ios_base&, C,
150		  unsigned long long) const;
151#endif
152
153  template
154    ostreambuf_iterator<C>
155    num_put<C, ostreambuf_iterator<C> >::
156    _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char,
157		    double) const;
158
159  template
160    ostreambuf_iterator<C>
161    num_put<C, ostreambuf_iterator<C> >::
162    _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char,
163		    long double) const;
164
165  // time_get and time_put
166  template class __timepunct<C>;
167  template struct __timepunct_cache<C>;
168  template class time_put<C, ostreambuf_iterator<C> >;
169  template class time_put_byname<C, ostreambuf_iterator<C> >;
170  template class time_get<C, istreambuf_iterator<C> >;
171  template class time_get_byname<C, istreambuf_iterator<C> >;
172
173  // messages
174  template class messages<C>;
175  template class messages_byname<C>;
176
177  // ctype
178  inline template class __ctype_abstract_base<C>;
179  template class ctype_byname<C>;
180
181  // codecvt
182  inline template class __codecvt_abstract_base<C, char, mbstate_t>;
183  template class codecvt_byname<C, char, mbstate_t>;
184
185  // collate
186  template class collate<C>;
187  template class collate_byname<C>;
188
189  // use_facet
190  // NB: use_facet<ctype> is specialized
191  template
192    const codecvt<C, char, mbstate_t>&
193    use_facet<codecvt<C, char, mbstate_t> >(const locale&);
194
195  template
196    const collate<C>&
197    use_facet<collate<C> >(const locale&);
198
199  template
200    const numpunct<C>&
201    use_facet<numpunct<C> >(const locale&);
202
203  template
204    const num_put<C>&
205    use_facet<num_put<C> >(const locale&);
206
207  template
208    const num_get<C>&
209    use_facet<num_get<C> >(const locale&);
210
211  template
212    const moneypunct<C, true>&
213    use_facet<moneypunct<C, true> >(const locale&);
214
215  template
216    const moneypunct<C, false>&
217    use_facet<moneypunct<C, false> >(const locale&);
218
219  template
220    const money_put<C>&
221    use_facet<money_put<C> >(const locale&);
222
223  template
224    const money_get<C>&
225    use_facet<money_get<C> >(const locale&);
226
227  template
228    const __timepunct<C>&
229    use_facet<__timepunct<C> >(const locale&);
230
231  template
232    const time_put<C>&
233    use_facet<time_put<C> >(const locale&);
234
235  template
236    const time_get<C>&
237    use_facet<time_get<C> >(const locale&);
238
239  template
240    const messages<C>&
241    use_facet<messages<C> >(const locale&);
242
243  // has_facet
244  template
245    bool
246    has_facet<ctype<C> >(const locale&);
247
248  template
249    bool
250    has_facet<codecvt<C, char, mbstate_t> >(const locale&);
251
252  template
253    bool
254    has_facet<collate<C> >(const locale&);
255
256  template
257    bool
258    has_facet<numpunct<C> >(const locale&);
259
260  template
261    bool
262    has_facet<num_put<C> >(const locale&);
263
264  template
265    bool
266    has_facet<num_get<C> >(const locale&);
267
268  template
269    bool
270    has_facet<moneypunct<C> >(const locale&);
271
272  template
273    bool
274    has_facet<money_put<C> >(const locale&);
275
276  template
277    bool
278    has_facet<money_get<C> >(const locale&);
279
280  template
281    bool
282    has_facet<__timepunct<C> >(const locale&);
283
284  template
285    bool
286    has_facet<time_put<C> >(const locale&);
287
288  template
289    bool
290    has_facet<time_get<C> >(const locale&);
291
292  template
293    bool
294    has_facet<messages<C> >(const locale&);
295
296
297  // locale functions.
298  template
299    C*
300    __add_grouping<C>(C*, C, char const*, size_t,
301			 C const*, C const*);
302
303  template class __pad<C, char_traits<C> >;
304
305  template
306    int
307    __int_to_char(C*, unsigned long, const C*,
308		  ios_base::fmtflags, bool);
309
310#ifdef _GLIBCXX_USE_LONG_LONG
311  template
312    int
313    __int_to_char(C*, unsigned long long, const C*,
314		  ios_base::fmtflags, bool);
315#endif
316} // namespace std
317