# locale-inst.cc

    00001 // Locale support -*- C++ -*-
    00002
    00003 // Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
    00004 //
    00005 // This file is part of the GNU ISO C++ Library.  This library is free
    00006 // software; you can redistribute it and/or modify it under the
    00007 // terms of the GNU General Public License as published by the
    00008 // Free Software Foundation; either version 2, or (at your option)
    00009 // any later version.
    00010
    00011 // This library is distributed in the hope that it will be useful,
    00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00014 // GNU General Public License for more details.
    00015
    00016 // You should have received a copy of the GNU General Public License along
    00017 // with this library; see the file COPYING.  If not, write to the Free
    00018 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    00019 // USA.
    00020
    00021 // As a special exception, you may use this file as part of a free software
    00022 // library without restriction.  Specifically, if other files instantiate
    00023 // templates or use macros or inline functions from this file, or you compile
    00024 // this file and link it with other files to produce an executable, this
    00025 // file does not by itself cause the resulting executable to be covered by
    00026 // the GNU General Public License.  This exception does not however
    00027 // invalidate any other reasons why the executable file might be covered by
    00028 // the GNU General Public License.
    00029
    00030 //
    00031 // ISO C++ 14882: 22.1  Locales
    00032 //
    00033
    00034 #include <cstdlib>
    00035 #include <clocale>
    00036 #include <cstring>
    00037 #include <locale>
    00038
    00039 namespace std
    00040 {
    00041   // moneypunct, money_get, and money_put
    00042   template class moneypunct<char, false>;
    00043   template class moneypunct<char, true>;
    00044   template class moneypunct_byname<char, false>;
    00045   template class moneypunct_byname<char, true>;
    00046   template class money_get<char, istreambuf_iterator<char> >;
    00047   template class money_put<char, ostreambuf_iterator<char> >;
    00048
    00049 #ifdef _GLIBCPP_USE_WCHAR_T
    00050   template class moneypunct<wchar_t, false>;
    00051   template class moneypunct<wchar_t, true>;
    00052   template class moneypunct_byname<wchar_t, false>;
    00053   template class moneypunct_byname<wchar_t, true>;
    00054   template class money_get<wchar_t, istreambuf_iterator<wchar_t> >;
    00055   template class money_put<wchar_t, ostreambuf_iterator<wchar_t> >;
    00056 #endif
    00057
    00058   // numpunct, numpunct_byname, num_get, and num_put
    00059   template class numpunct<char>;
    00060   template class numpunct_byname<char>;
    00061   template class num_get<char, istreambuf_iterator<char> >;
    00062   template class num_put<char, ostreambuf_iterator<char> >;
    00063   template
    00064     ostreambuf_iterator<char>
    00065     num_put<char, ostreambuf_iterator<char> >::
    00066     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char,
    00067            long) const;
    00068
    00069   template
    00070     ostreambuf_iterator<char>
    00071     num_put<char, ostreambuf_iterator<char> >::
    00072     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char,
    00073            unsigned long) const;
    00074
    00075 #ifdef _GLIBCPP_USE_LONG_LONG
    00076   template
    00077     ostreambuf_iterator<char>
    00078     num_put<char, ostreambuf_iterator<char> >::
    00079     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char,
    00080            long long) const;
    00081
    00082   template
    00083     ostreambuf_iterator<char>
    00084     num_put<char, ostreambuf_iterator<char> >::
    00085     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char,
    00086            unsigned long long) const;
    00087 #endif
    00088
    00089   template
    00090     ostreambuf_iterator<char>
    00091     num_put<char, ostreambuf_iterator<char> >::
    00092     _M_convert_float(ostreambuf_iterator<char>, ios_base&, char, char,
    00093              double) const;
    00094
    00095   template
    00096     ostreambuf_iterator<char>
    00097     num_put<char, ostreambuf_iterator<char> >::
    00098     _M_convert_float(ostreambuf_iterator<char>, ios_base&, char, char,
    00099              long double) const;
    00100
    00101 #ifdef _GLIBCPP_USE_WCHAR_T
    00102   template class numpunct<wchar_t>;
    00103   template class numpunct_byname<wchar_t>;
    00104   template class num_get<wchar_t, istreambuf_iterator<wchar_t> >;
    00105   template class num_put<wchar_t, ostreambuf_iterator<wchar_t> >;
    00106
    00107   template
    00108     ostreambuf_iterator<wchar_t>
    00109     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00110     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t,
    00111            long) const;
    00112
    00113   template
    00114     ostreambuf_iterator<wchar_t>
    00115     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00116     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t,
    00117            unsigned long) const;
    00118
    00119 #ifdef _GLIBCPP_USE_LONG_LONG
    00120   template
    00121     ostreambuf_iterator<wchar_t>
    00122     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00123     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t,
    00124            long long) const;
    00125
    00126   template
    00127     ostreambuf_iterator<wchar_t>
    00128     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00129     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t,
    00130            unsigned long long) const;
    00131 #endif
    00132
    00133   template
    00134     ostreambuf_iterator<wchar_t>
    00135     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00136     _M_convert_float(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
    00137              double) const;
    00138
    00139   template
    00140     ostreambuf_iterator<wchar_t>
    00141     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00142     _M_convert_float(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
    00143              long double) const;
    00144 #endif
    00145
    00146 #if 1
    00147       // XXX GLIBCXX_ABI Deprecated, compatibility only.
    00148   template
    00149     ostreambuf_iterator<char>
    00150     num_put<char, ostreambuf_iterator<char> >::
    00151     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
    00152            long) const;
    00153
    00154   template
    00155     ostreambuf_iterator<char>
    00156     num_put<char, ostreambuf_iterator<char> >::
    00157     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
    00158            unsigned long) const;
    00159
    00160 #ifdef _GLIBCPP_USE_LONG_LONG
    00161   template
    00162     ostreambuf_iterator<char>
    00163     num_put<char, ostreambuf_iterator<char> >::
    00164     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
    00165            long long) const;
    00166
    00167   template
    00168     ostreambuf_iterator<char>
    00169     num_put<char, ostreambuf_iterator<char> >::
    00170     _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
    00171            unsigned long long) const;
    00172 #endif
    00173
    00174 #ifdef _GLIBCPP_USE_WCHAR_T
    00175   template
    00176     ostreambuf_iterator<wchar_t>
    00177     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00178     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
    00179            char, long) const;
    00180
    00181   template
    00182     ostreambuf_iterator<wchar_t>
    00183     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00184     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
    00185            char, unsigned long) const;
    00186
    00187 #ifdef _GLIBCPP_USE_LONG_LONG
    00188   template
    00189     ostreambuf_iterator<wchar_t>
    00190     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00191     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
    00192            char, long long) const;
    00193
    00194   template
    00195     ostreambuf_iterator<wchar_t>
    00196     num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
    00197     _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
    00198            char, unsigned long long) const;
    00199 #endif
    00200 #endif
    00201
    00202 #endif
    00203
    00204   // time_get and time_put
    00205   template class __timepunct<char>;
    00206   template class time_put<char, ostreambuf_iterator<char> >;
    00207   template class time_put_byname<char, ostreambuf_iterator<char> >;
    00208   template class time_get<char, istreambuf_iterator<char> >;
    00209   template class time_get_byname<char, istreambuf_iterator<char> >;
    00210
    00211 #ifdef _GLIBCPP_USE_WCHAR_T
    00212   template class __timepunct<wchar_t>;
    00213   template class time_put<wchar_t, ostreambuf_iterator<wchar_t> >;
    00214   template class time_put_byname<wchar_t, ostreambuf_iterator<wchar_t> >;
    00215   template class time_get<wchar_t, istreambuf_iterator<wchar_t> >;
    00216   template class time_get_byname<wchar_t, istreambuf_iterator<wchar_t> >;
    00217 #endif
    00218
    00219   // messages
    00220   template class messages<char>;
    00221   template class messages_byname<char>;
    00222 #ifdef _GLIBCPP_USE_WCHAR_T
    00223   template class messages<wchar_t>;
    00224   template class messages_byname<wchar_t>;
    00225 #endif
    00226
    00227   // ctype
    00228   inline template class __ctype_abstract_base<char>;
    00229   template class ctype_byname<char>;
    00230 #ifdef _GLIBCPP_USE_WCHAR_T
    00231   inline template class __ctype_abstract_base<wchar_t>;
    00232   template class ctype_byname<wchar_t>;
    00233 #endif
    00234
    00235   // codecvt
    00236   inline template class __codecvt_abstract_base<char, char, mbstate_t>;
    00237   template class codecvt_byname<char, char, mbstate_t>;
    00238 #ifdef _GLIBCPP_USE_WCHAR_T
    00239   inline template class __codecvt_abstract_base<wchar_t, char, mbstate_t>;
    00240   template class codecvt_byname<wchar_t, char, mbstate_t>;
    00241 #endif
    00242
    00243   // collate
    00244   template class collate<char>;
    00245   template class collate_byname<char>;
    00246 #ifdef _GLIBCPP_USE_WCHAR_T
    00247   template class collate<wchar_t>;
    00248   template class collate_byname<wchar_t>;
    00249 #endif
    00250
    00251   // use_facet
    00252   // NB: use_facet<ctype> is specialized
    00253   template
    00254     const codecvt<char, char, mbstate_t>&
    00255     use_facet<codecvt<char, char, mbstate_t> >(const locale&);
    00256
    00257   template
    00258     const collate<char>&
    00259     use_facet<collate<char> >(const locale&);
    00260
    00261   template
    00262     const numpunct<char>&
    00263     use_facet<numpunct<char> >(const locale&);
    00264
    00265   template
    00266     const num_put<char>&
    00267     use_facet<num_put<char> >(const locale&);
    00268
    00269   template
    00270     const num_get<char>&
    00271     use_facet<num_get<char> >(const locale&);
    00272
    00273   template
    00274     const moneypunct<char, true>&
    00275     use_facet<moneypunct<char, true> >(const locale&);
    00276
    00277   template
    00278     const moneypunct<char, false>&
    00279     use_facet<moneypunct<char, false> >(const locale&);
    00280
    00281   template
    00282     const money_put<char>&
    00283     use_facet<money_put<char> >(const locale&);
    00284
    00285   template
    00286     const money_get<char>&
    00287     use_facet<money_get<char> >(const locale&);
    00288
    00289   template
    00290     const __timepunct<char>&
    00291     use_facet<__timepunct<char> >(const locale&);
    00292
    00293   template
    00294     const time_put<char>&
    00295     use_facet<time_put<char> >(const locale&);
    00296
    00297   template
    00298     const time_get<char>&
    00299     use_facet<time_get<char> >(const locale&);
    00300
    00301   template
    00302     const messages<char>&
    00303     use_facet<messages<char> >(const locale&);
    00304
    00305 #ifdef _GLIBCPP_USE_WCHAR_T
    00306   template
    00307     const codecvt<wchar_t, char, mbstate_t>&
    00308     use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
    00309
    00310   template
    00311     const collate<wchar_t>&
    00312     use_facet<collate<wchar_t> >(const locale&);
    00313
    00314   template
    00315     const numpunct<wchar_t>&
    00316     use_facet<numpunct<wchar_t> >(const locale&);
    00317
    00318   template
    00319     const num_put<wchar_t>&
    00320     use_facet<num_put<wchar_t> >(const locale&);
    00321
    00322   template
    00323     const num_get<wchar_t>&
    00324     use_facet<num_get<wchar_t> >(const locale&);
    00325
    00326   template
    00327     const moneypunct<wchar_t, true>&
    00328     use_facet<moneypunct<wchar_t, true> >(const locale&);
    00329
    00330   template
    00331     const moneypunct<wchar_t, false>&
    00332     use_facet<moneypunct<wchar_t, false> >(const locale&);
    00333
    00334   template
    00335     const money_put<wchar_t>&
    00336     use_facet<money_put<wchar_t> >(const locale&);
    00337
    00338   template
    00339     const money_get<wchar_t>&
    00340     use_facet<money_get<wchar_t> >(const locale&);
    00341
    00342   template
    00343     const __timepunct<wchar_t>&
    00344     use_facet<__timepunct<wchar_t> >(const locale&);
    00345
    00346   template
    00347     const time_put<wchar_t>&
    00348     use_facet<time_put<wchar_t> >(const locale&);
    00349
    00350   template
    00351     const time_get<wchar_t>&
    00352     use_facet<time_get<wchar_t> >(const locale&);
    00353
    00354   template
    00355     const messages<wchar_t>&
    00356     use_facet<messages<wchar_t> >(const locale&);
    00357 #endif
    00358
    00359   // has_facet
    00360   template
    00361     bool
    00362     has_facet<ctype<char> >(const locale&);
    00363
    00364   template
    00365     bool
    00366     has_facet<codecvt<char, char, mbstate_t> >(const locale&);
    00367
    00368   template
    00369     bool
    00370     has_facet<collate<char> >(const locale&);
    00371
    00372   template
    00373     bool
    00374     has_facet<numpunct<char> >(const locale&);
    00375
    00376   template
    00377     bool
    00378     has_facet<num_put<char> >(const locale&);
    00379
    00380   template
    00381     bool
    00382     has_facet<num_get<char> >(const locale&);
    00383
    00384   template
    00385     bool
    00386     has_facet<moneypunct<char> >(const locale&);
    00387
    00388   template
    00389     bool
    00390     has_facet<money_put<char> >(const locale&);
    00391
    00392   template
    00393     bool
    00394     has_facet<money_get<char> >(const locale&);
    00395
    00396   template
    00397     bool
    00398     has_facet<__timepunct<char> >(const locale&);
    00399
    00400   template
    00401     bool
    00402     has_facet<time_put<char> >(const locale&);
    00403
    00404   template
    00405     bool
    00406     has_facet<time_get<char> >(const locale&);
    00407
    00408   template
    00409     bool
    00410     has_facet<messages<char> >(const locale&);
    00411
    00412 #ifdef _GLIBCPP_USE_WCHAR_T
    00413  template
    00414     bool
    00415     has_facet<ctype<wchar_t> >(const locale&);
    00416
    00417   template
    00418     bool
    00419     has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
    00420
    00421   template
    00422     bool
    00423     has_facet<collate<wchar_t> >(const locale&);
    00424
    00425   template
    00426     bool
    00427     has_facet<numpunct<wchar_t> >(const locale&);
    00428
    00429   template
    00430     bool
    00431     has_facet<num_put<wchar_t> >(const locale&);
    00432
    00433   template
    00434     bool
    00435     has_facet<num_get<wchar_t> >(const locale&);
    00436
    00437   template
    00438     bool
    00439     has_facet<moneypunct<wchar_t> >(const locale&);
    00440
    00441   template
    00442     bool
    00443     has_facet<money_put<wchar_t> >(const locale&);
    00444
    00445   template
    00446     bool
    00447     has_facet<money_get<wchar_t> >(const locale&);
    00448
    00449   template
    00450     bool
    00451     has_facet<__timepunct<wchar_t> >(const locale&);
    00452
    00453   template
    00454     bool
    00455     has_facet<time_put<wchar_t> >(const locale&);
    00456
    00457   template
    00458     bool
    00459     has_facet<time_get<wchar_t> >(const locale&);
    00460
    00461   template
    00462     bool
    00463     has_facet<messages<wchar_t> >(const locale&);
    00464 #endif
    00465
    00466   // locale
    00467   template
    00468     char*
    00469     __add_grouping<char>(char*, char, char const*, char const*,
    00470              char const*, char const*);
    00471
    00472   template
    00473     bool
    00474     __verify_grouping<char>(const basic_string<char>&, basic_string<char>&);
    00475
    00476   template class __pad<char, char_traits<char> >;
    00477
    00478 #ifdef _GLIBCPP_USE_WCHAR_T
    00479   template
    00480     wchar_t*
    00481     __add_grouping<wchar_t>(wchar_t*, wchar_t, char const*, char const*,
    00482                 wchar_t const*, wchar_t const*);
    00483   template
    00484     bool
    00485     __verify_grouping<wchar_t>(const basic_string<wchar_t>&,
    00486                    basic_string<wchar_t>&);
    00487
    00488   template class __pad<wchar_t, char_traits<wchar_t> >;
    00489 #endif
    00490
    00491   template
    00492     int
    00493     __convert_from_v(char*, const int, const char*, double,
    00494              const __c_locale&, int);
    00495
    00496   template
    00497     int
    00498     __convert_from_v(char*, const int, const char*, long double,
    00499              const __c_locale&, int);
    00500
    00501   template
    00502     int
    00503     __convert_from_v(char*, const int, const char*, long,
    00504              const __c_locale&, int);
    00505
    00506   template
    00507     int
    00508     __convert_from_v(char*, const int, const char*, unsigned long,
    00509              const __c_locale&, int);
    00510
    00511 #ifdef _GLIBCPP_USE_LONG_LONG
    00512   template
    00513     int
    00514     __convert_from_v(char*, const int, const char*, long long,
    00515              const __c_locale&, int);
    00516
    00517   template
    00518     int
    00519     __convert_from_v(char*, const int, const char*, unsigned long long,
    00520              const __c_locale&, int);
    00521 #endif
    00522
    00523   template
    00524     int
    00525     __int_to_char(char*, const int, unsigned long, const char*,
    00526           ios_base::fmtflags, bool);
    00527
    00528 #ifdef _GLIBCPP_USE_WCHAR_T
    00529   template
    00530     int
    00531     __int_to_char(wchar_t*, const int, unsigned long, const wchar_t*,
    00532           ios_base::fmtflags, bool);
    00533 #endif
    00534
    00535 #ifdef _GLIBCPP_USE_LONG_LONG
    00536   template
    00537     int
    00538     __int_to_char(char*, const int, unsigned long long, const char*,
    00539           ios_base::fmtflags, bool);
    00540
    00541 #ifdef _GLIBCPP_USE_WCHAR_T
    00542   template
    00543     int
    00544     __int_to_char(wchar_t*, const int, unsigned long long, const wchar_t*,
    00545           ios_base::fmtflags, bool);
    00546 #endif
    00547 #endif
    00548
    00549   template<typename _CharT>
    00550     void
    00551     __locale_cache<_CharT>::_S_callback(ios_base::event __ev, ios_base& __io, int);
    00552
    00553   template class __locale_cache<char>;
    00554 #ifdef _GLIBCPP_USE_WCHAR_T
    00555   template class __locale_cache<wchar_t>;
    00556 #endif
    00557 } // namespace std