Remove incorrect cache_purge() calls in *_rmdir() (OLD API). These could
[dragonfly.git] / contrib / libstdc++3 / src / locale-inst.cc
1 // Locale support -*- C++ -*-
2
3 // Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
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
8 // Free Software Foundation; either version 2, or (at your option)
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
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING.  If not, write to the Free
18 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19 // USA.
20
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction.  Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License.  This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
29
30 //
31 // ISO C++ 14882: 22.1  Locales
32 //
33
34 #include <cstdlib>
35 #include <clocale>
36 #include <cstring>
37 #include <locale>
38
39 namespace std
40 {
41   // moneypunct, money_get, and money_put
42   template class moneypunct<char, false>;
43   template class moneypunct<char, true>;
44   template class moneypunct_byname<char, false>;
45   template class moneypunct_byname<char, true>;
46   template class money_get<char, istreambuf_iterator<char> >;
47   template class money_put<char, ostreambuf_iterator<char> >;
48   template class __locale_cache<numpunct<char> >;
49
50 #ifdef _GLIBCPP_USE_WCHAR_T
51   template class moneypunct<wchar_t, false>;
52   template class moneypunct<wchar_t, true>;
53   template class moneypunct_byname<wchar_t, false>;
54   template class moneypunct_byname<wchar_t, true>;
55   template class money_get<wchar_t, istreambuf_iterator<wchar_t> >;
56   template class money_put<wchar_t, ostreambuf_iterator<wchar_t> >;
57   template class __locale_cache<numpunct<wchar_t> >;
58 #endif
59
60   // numpunct, numpunct_byname, num_get, and num_put
61   template class numpunct<char>;
62   template class numpunct_byname<char>;
63   template class num_get<char, istreambuf_iterator<char> >;
64   template class num_put<char, ostreambuf_iterator<char> >; 
65   template
66     ostreambuf_iterator<char>
67     num_put<char, ostreambuf_iterator<char> >::
68     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, 
69                    long) const;
70
71   template
72     ostreambuf_iterator<char>
73     num_put<char, ostreambuf_iterator<char> >::
74     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, 
75                    unsigned long) const;
76
77 #ifdef _GLIBCPP_USE_LONG_LONG
78   template
79     ostreambuf_iterator<char>
80     num_put<char, ostreambuf_iterator<char> >::
81     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, 
82                    long long) const;
83
84   template
85     ostreambuf_iterator<char>
86     num_put<char, ostreambuf_iterator<char> >::
87     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, 
88                    unsigned long long) const;
89 #endif
90
91   template
92     ostreambuf_iterator<char>
93     num_put<char, ostreambuf_iterator<char> >::
94     _M_convert_float(ostreambuf_iterator<char>, ios_base&, char, char, 
95                      double) const;
96
97   template
98     ostreambuf_iterator<char>
99     num_put<char, ostreambuf_iterator<char> >::
100     _M_convert_float(ostreambuf_iterator<char>, ios_base&, char, char, 
101                      long double) const;
102   
103 #ifdef _GLIBCPP_USE_WCHAR_T
104   template class numpunct<wchar_t>;
105   template class numpunct_byname<wchar_t>;
106   template class num_get<wchar_t, istreambuf_iterator<wchar_t> >;
107   template class num_put<wchar_t, ostreambuf_iterator<wchar_t> >;
108
109   template
110     ostreambuf_iterator<wchar_t>
111     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
112     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, 
113                    long) const;
114
115   template
116     ostreambuf_iterator<wchar_t>
117     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
118     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, 
119                    unsigned long) const;
120
121 #ifdef _GLIBCPP_USE_LONG_LONG
122   template
123     ostreambuf_iterator<wchar_t>
124     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
125     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t,
126                    long long) const;
127
128   template
129     ostreambuf_iterator<wchar_t>
130     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
131     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t,
132                    unsigned long long) const;
133 #endif
134
135   template
136     ostreambuf_iterator<wchar_t>
137     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
138     _M_convert_float(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char, 
139                      double) const;
140
141   template
142     ostreambuf_iterator<wchar_t>
143     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
144     _M_convert_float(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char, 
145                      long double) const;
146 #endif
147
148 #if 1
149       // XXX GLIBCXX_ABI Deprecated, compatibility only.
150   template
151     ostreambuf_iterator<char>
152     num_put<char, ostreambuf_iterator<char> >::
153     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char, 
154                    long) const;
155
156   template
157     ostreambuf_iterator<char>
158     num_put<char, ostreambuf_iterator<char> >::
159     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char, 
160                    unsigned long) const;
161
162 #ifdef _GLIBCPP_USE_LONG_LONG
163   template
164     ostreambuf_iterator<char>
165     num_put<char, ostreambuf_iterator<char> >::
166     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char, 
167                    long long) const;
168
169   template
170     ostreambuf_iterator<char>
171     num_put<char, ostreambuf_iterator<char> >::
172     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
173                    unsigned long long) const;
174 #endif
175
176 #ifdef _GLIBCPP_USE_WCHAR_T
177   template
178     ostreambuf_iterator<wchar_t>
179     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
180     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char, 
181                    char, long) const;
182
183   template
184     ostreambuf_iterator<wchar_t>
185     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
186     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char, 
187                    char, unsigned long) const;
188
189 #ifdef _GLIBCPP_USE_LONG_LONG
190   template
191     ostreambuf_iterator<wchar_t>
192     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
193     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char, 
194                    char, long long) const;
195
196   template
197     ostreambuf_iterator<wchar_t>
198     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
199     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char, 
200                    char, unsigned long long) const;
201 #endif
202 #endif
203
204 #endif
205
206   // time_get and time_put
207   template class __timepunct<char>;
208   template class time_put<char, ostreambuf_iterator<char> >;
209   template class time_put_byname<char, ostreambuf_iterator<char> >;
210   template class time_get<char, istreambuf_iterator<char> >;
211   template class time_get_byname<char, istreambuf_iterator<char> >;
212
213 #ifdef _GLIBCPP_USE_WCHAR_T
214   template class __timepunct<wchar_t>;
215   template class time_put<wchar_t, ostreambuf_iterator<wchar_t> >;
216   template class time_put_byname<wchar_t, ostreambuf_iterator<wchar_t> >;
217   template class time_get<wchar_t, istreambuf_iterator<wchar_t> >;
218   template class time_get_byname<wchar_t, istreambuf_iterator<wchar_t> >;
219 #endif
220
221   // messages
222   template class messages<char>;
223   template class messages_byname<char>;
224 #ifdef _GLIBCPP_USE_WCHAR_T
225   template class messages<wchar_t>;
226   template class messages_byname<wchar_t>;
227 #endif
228   
229   // ctype
230   inline template class __ctype_abstract_base<char>;
231   template class ctype_byname<char>;
232 #ifdef _GLIBCPP_USE_WCHAR_T
233   inline template class __ctype_abstract_base<wchar_t>;
234   template class ctype_byname<wchar_t>;
235 #endif
236   
237   // codecvt
238   inline template class __codecvt_abstract_base<char, char, mbstate_t>;
239   template class codecvt_byname<char, char, mbstate_t>;
240 #ifdef _GLIBCPP_USE_WCHAR_T
241   inline template class __codecvt_abstract_base<wchar_t, char, mbstate_t>;
242   template class codecvt_byname<wchar_t, char, mbstate_t>;
243 #endif
244
245   // collate
246   template class collate<char>;
247   template class collate_byname<char>;
248 #ifdef _GLIBCPP_USE_WCHAR_T
249   template class collate<wchar_t>;
250   template class collate_byname<wchar_t>;
251 #endif
252     
253   // use_facet
254   // NB: use_facet<ctype> is specialized
255   template
256     const codecvt<char, char, mbstate_t>& 
257     use_facet<codecvt<char, char, mbstate_t> >(const locale&);
258
259   template
260     const collate<char>& 
261     use_facet<collate<char> >(const locale&);
262
263   template
264     const numpunct<char>& 
265     use_facet<numpunct<char> >(const locale&);
266
267   template 
268     const num_put<char>& 
269     use_facet<num_put<char> >(const locale&);
270
271   template 
272     const num_get<char>& 
273     use_facet<num_get<char> >(const locale&);
274
275   template
276     const moneypunct<char, true>& 
277     use_facet<moneypunct<char, true> >(const locale&);
278
279   template
280     const moneypunct<char, false>& 
281     use_facet<moneypunct<char, false> >(const locale&);
282
283   template 
284     const money_put<char>& 
285     use_facet<money_put<char> >(const locale&);
286
287   template 
288     const money_get<char>& 
289     use_facet<money_get<char> >(const locale&);
290
291   template
292     const __timepunct<char>& 
293     use_facet<__timepunct<char> >(const locale&);
294
295   template 
296     const time_put<char>& 
297     use_facet<time_put<char> >(const locale&);
298
299   template 
300     const time_get<char>& 
301     use_facet<time_get<char> >(const locale&);
302
303   template 
304     const messages<char>& 
305     use_facet<messages<char> >(const locale&);
306
307 #ifdef _GLIBCPP_USE_WCHAR_T
308   template
309     const codecvt<wchar_t, char, mbstate_t>& 
310     use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
311
312   template
313     const collate<wchar_t>& 
314     use_facet<collate<wchar_t> >(const locale&);
315
316   template
317     const numpunct<wchar_t>& 
318     use_facet<numpunct<wchar_t> >(const locale&);
319
320   template 
321     const num_put<wchar_t>& 
322     use_facet<num_put<wchar_t> >(const locale&);
323
324   template 
325     const num_get<wchar_t>& 
326     use_facet<num_get<wchar_t> >(const locale&);
327
328   template
329     const moneypunct<wchar_t, true>& 
330     use_facet<moneypunct<wchar_t, true> >(const locale&);
331
332   template
333     const moneypunct<wchar_t, false>& 
334     use_facet<moneypunct<wchar_t, false> >(const locale&);
335  
336   template 
337     const money_put<wchar_t>& 
338     use_facet<money_put<wchar_t> >(const locale&);
339
340   template 
341     const money_get<wchar_t>& 
342     use_facet<money_get<wchar_t> >(const locale&);
343
344   template
345     const __timepunct<wchar_t>& 
346     use_facet<__timepunct<wchar_t> >(const locale&);
347
348   template 
349     const time_put<wchar_t>& 
350     use_facet<time_put<wchar_t> >(const locale&);
351
352   template 
353     const time_get<wchar_t>& 
354     use_facet<time_get<wchar_t> >(const locale&);
355
356   template 
357     const messages<wchar_t>& 
358     use_facet<messages<wchar_t> >(const locale&);
359 #endif
360
361   // has_facet
362   template 
363     bool
364     has_facet<ctype<char> >(const locale&);
365
366   template 
367     bool
368     has_facet<codecvt<char, char, mbstate_t> >(const locale&);
369
370   template 
371     bool
372     has_facet<collate<char> >(const locale&);
373
374   template 
375     bool
376     has_facet<numpunct<char> >(const locale&);
377
378   template 
379     bool
380     has_facet<num_put<char> >(const locale&);
381
382   template 
383     bool
384     has_facet<num_get<char> >(const locale&);
385
386   template 
387     bool
388     has_facet<moneypunct<char> >(const locale&);
389
390   template 
391     bool
392     has_facet<money_put<char> >(const locale&);
393
394   template 
395     bool
396     has_facet<money_get<char> >(const locale&);
397
398   template 
399     bool
400     has_facet<__timepunct<char> >(const locale&);
401
402   template 
403     bool
404     has_facet<time_put<char> >(const locale&);
405
406   template 
407     bool
408     has_facet<time_get<char> >(const locale&);
409
410   template 
411     bool
412     has_facet<messages<char> >(const locale&);
413
414 #ifdef _GLIBCPP_USE_WCHAR_T
415  template 
416     bool
417     has_facet<ctype<wchar_t> >(const locale&);
418
419   template 
420     bool
421     has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
422
423   template 
424     bool
425     has_facet<collate<wchar_t> >(const locale&);
426
427   template 
428     bool
429     has_facet<numpunct<wchar_t> >(const locale&);
430
431   template 
432     bool
433     has_facet<num_put<wchar_t> >(const locale&);
434
435   template 
436     bool
437     has_facet<num_get<wchar_t> >(const locale&);
438
439   template 
440     bool
441     has_facet<moneypunct<wchar_t> >(const locale&);
442
443   template 
444     bool
445     has_facet<money_put<wchar_t> >(const locale&);
446
447   template 
448     bool
449     has_facet<money_get<wchar_t> >(const locale&);
450
451   template 
452     bool
453     has_facet<__timepunct<wchar_t> >(const locale&);
454
455   template 
456     bool
457     has_facet<time_put<wchar_t> >(const locale&);
458
459   template 
460     bool
461     has_facet<time_get<wchar_t> >(const locale&);
462
463   template 
464     bool
465     has_facet<messages<wchar_t> >(const locale&);
466 #endif
467
468   // __use_cache
469   template
470     const __locale_cache<numpunct<char> >&
471     __use_cache<numpunct<char> >(const locale& __loc);
472
473 #ifdef _GLIBCPP_USE_WCHAR_T
474    template
475     const __locale_cache<numpunct<wchar_t> >&
476     __use_cache<numpunct<wchar_t> >(const locale& __loc);
477 #endif
478
479   // locale
480   template
481     char*
482     __add_grouping<char>(char*, char, char const*, char const*, 
483                          char const*, char const*);
484
485   template
486     bool
487     __verify_grouping<char>(const basic_string<char>&, basic_string<char>&);
488
489   template class __pad<char, char_traits<char> >;
490
491 #ifdef _GLIBCPP_USE_WCHAR_T
492   template
493     wchar_t*
494     __add_grouping<wchar_t>(wchar_t*, wchar_t, char const*, char const*, 
495                             wchar_t const*, wchar_t const*);
496   template
497     bool
498     __verify_grouping<wchar_t>(const basic_string<wchar_t>&, 
499                                basic_string<wchar_t>&);
500
501   template class __pad<wchar_t, char_traits<wchar_t> >;
502 #endif 
503
504   template
505     int
506     __convert_from_v(char*, const int, const char*, double, 
507                      const __c_locale&, int);
508
509   template
510     int
511     __convert_from_v(char*, const int, const char*, long double, 
512                      const __c_locale&, int);
513
514   template
515     int
516     __convert_from_v(char*, const int, const char*, long, 
517                      const __c_locale&, int);
518
519   template
520     int
521     __convert_from_v(char*, const int, const char*, unsigned long, 
522                      const __c_locale&, int);
523
524 #ifdef _GLIBCPP_USE_LONG_LONG
525   template
526     int
527     __convert_from_v(char*, const int, const char*, long long, 
528                      const __c_locale&, int);
529
530   template
531     int
532     __convert_from_v(char*, const int, const char*, unsigned long long, 
533                      const __c_locale&, int);
534 #endif
535
536   template
537     int
538     __int_to_char(char*, const int, unsigned long, const char*, 
539                   ios_base::fmtflags, bool);
540
541 #ifdef _GLIBCPP_USE_WCHAR_T
542   template
543     int
544     __int_to_char(wchar_t*, const int, unsigned long, const wchar_t*, 
545                   ios_base::fmtflags, bool);
546 #endif
547
548 #ifdef _GLIBCPP_USE_LONG_LONG
549   template
550     int
551     __int_to_char(char*, const int, unsigned long long, const char*, 
552                   ios_base::fmtflags, bool);
553
554 #ifdef _GLIBCPP_USE_WCHAR_T
555   template
556     int
557     __int_to_char(wchar_t*, const int, unsigned long long, const wchar_t*,
558                   ios_base::fmtflags, bool);
559 #endif
560 #endif
561 } // namespace std