1 // Locale support -*- C++ -*- 2 3 // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 4 // 2009, 2011 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 3, 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 // Under Section 7 of GPL version 3, you are granted additional 18 // permissions described in the GCC Runtime Library Exception, version 19 // 3.1, as published by the Free Software Foundation. 20 21 // You should have received a copy of the GNU General Public License and 22 // a copy of the GCC Runtime Library Exception along with this program; 23 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 // <http://www.gnu.org/licenses/>. 25 26 // 27 // ISO C++ 14882: 22.1 Locales 28 // 29 30 #include <locale> 31 32 // Instantiation configuration. 33 #ifndef C 34 # define C char 35 # define C_is_char 36 #endif 37 38 namespace std _GLIBCXX_VISIBILITY(default) 39 { 40 _GLIBCXX_BEGIN_NAMESPACE_VERSION 41 42 // moneypunct, money_get, and money_put 43 template class moneypunct<C, false>; 44 template class moneypunct<C, true>; 45 template struct __moneypunct_cache<C, false>; 46 template struct __moneypunct_cache<C, true>; 47 template class moneypunct_byname<C, false>; 48 template class moneypunct_byname<C, true>; 49 _GLIBCXX_BEGIN_NAMESPACE_LDBL 50 template class money_get<C, istreambuf_iterator<C> >; 51 template class money_put<C, ostreambuf_iterator<C> >; 52 template 53 istreambuf_iterator<C> 54 money_get<C, istreambuf_iterator<C> >:: 55 _M_extract<true>(istreambuf_iterator<C>, istreambuf_iterator<C>, 56 ios_base&, ios_base::iostate&, string&) const; 57 58 template 59 istreambuf_iterator<C> 60 money_get<C, istreambuf_iterator<C> >:: 61 _M_extract<false>(istreambuf_iterator<C>, istreambuf_iterator<C>, 62 ios_base&, ios_base::iostate&, string&) const; 63 64 template 65 ostreambuf_iterator<C> 66 money_put<C, ostreambuf_iterator<C> >:: 67 _M_insert<true>(ostreambuf_iterator<C>, ios_base&, C, 68 const string_type&) const; 69 70 template 71 ostreambuf_iterator<C> 72 money_put<C, ostreambuf_iterator<C> >:: 73 _M_insert<false>(ostreambuf_iterator<C>, ios_base&, C, 74 const string_type&) const; 75 _GLIBCXX_END_NAMESPACE_LDBL 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 _GLIBCXX_BEGIN_NAMESPACE_LDBL 82 template class num_get<C, istreambuf_iterator<C> >; 83 template class num_put<C, ostreambuf_iterator<C> >; 84 template 85 istreambuf_iterator<C> 86 num_get<C, istreambuf_iterator<C> >:: 87 _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>, 88 ios_base&, ios_base::iostate&, 89 long&) const; 90 91 template 92 istreambuf_iterator<C> 93 num_get<C, istreambuf_iterator<C> >:: 94 _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>, 95 ios_base&, ios_base::iostate&, 96 unsigned short&) const; 97 98 template 99 istreambuf_iterator<C> 100 num_get<C, istreambuf_iterator<C> >:: 101 _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>, 102 ios_base&, ios_base::iostate&, 103 unsigned int&) const; 104 105 template 106 istreambuf_iterator<C> 107 num_get<C, istreambuf_iterator<C> >:: 108 _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>, 109 ios_base&, ios_base::iostate&, 110 unsigned long&) const; 111 112 #ifdef _GLIBCXX_USE_LONG_LONG 113 template 114 istreambuf_iterator<C> 115 num_get<C, istreambuf_iterator<C> >:: 116 _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>, 117 ios_base&, ios_base::iostate&, 118 long long&) const; 119 120 template 121 istreambuf_iterator<C> 122 num_get<C, istreambuf_iterator<C> >:: 123 _M_extract_int(istreambuf_iterator<C>, istreambuf_iterator<C>, 124 ios_base&, ios_base::iostate&, 125 unsigned long long&) const; 126 #endif 127 128 template 129 ostreambuf_iterator<C> 130 num_put<C, ostreambuf_iterator<C> >:: 131 _M_insert_int(ostreambuf_iterator<C>, ios_base&, C, 132 long) const; 133 134 template 135 ostreambuf_iterator<C> 136 num_put<C, ostreambuf_iterator<C> >:: 137 _M_insert_int(ostreambuf_iterator<C>, ios_base&, C, 138 unsigned long) const; 139 140 #ifdef _GLIBCXX_USE_LONG_LONG 141 template 142 ostreambuf_iterator<C> 143 num_put<C, ostreambuf_iterator<C> >:: 144 _M_insert_int(ostreambuf_iterator<C>, ios_base&, C, 145 long long) const; 146 147 template 148 ostreambuf_iterator<C> 149 num_put<C, ostreambuf_iterator<C> >:: 150 _M_insert_int(ostreambuf_iterator<C>, ios_base&, C, 151 unsigned long long) const; 152 #endif 153 154 template 155 ostreambuf_iterator<C> 156 num_put<C, ostreambuf_iterator<C> >:: 157 _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char, 158 double) const; 159 160 template 161 ostreambuf_iterator<C> 162 num_put<C, ostreambuf_iterator<C> >:: 163 _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char, 164 long double) const; 165 _GLIBCXX_END_NAMESPACE_LDBL 166 167 // time_get and time_put 168 template class __timepunct<C>; 169 template struct __timepunct_cache<C>; 170 template class time_put<C, ostreambuf_iterator<C> >; 171 template class time_put_byname<C, ostreambuf_iterator<C> >; 172 template class time_get<C, istreambuf_iterator<C> >; 173 template class time_get_byname<C, istreambuf_iterator<C> >; 174 175 // messages 176 template class messages<C>; 177 template class messages_byname<C>; 178 179 // ctype 180 inline template class __ctype_abstract_base<C>; 181 template class ctype_byname<C>; 182 183 // codecvt 184 inline template class __codecvt_abstract_base<C, char, mbstate_t>; 185 template class codecvt_byname<C, char, mbstate_t>; 186 187 // collate 188 template class collate<C>; 189 template class collate_byname<C>; 190 191 // use_facet 192 template 193 const ctype<C>& 194 use_facet<ctype<C> >(const locale&); 195 196 template 197 const codecvt<C, char, mbstate_t>& 198 use_facet<codecvt<C, char, mbstate_t> >(const locale&); 199 200 template 201 const collate<C>& 202 use_facet<collate<C> >(const locale&); 203 204 template 205 const numpunct<C>& 206 use_facet<numpunct<C> >(const locale&); 207 208 template 209 const num_put<C>& 210 use_facet<num_put<C> >(const locale&); 211 212 template 213 const num_get<C>& 214 use_facet<num_get<C> >(const locale&); 215 216 template 217 const moneypunct<C, true>& 218 use_facet<moneypunct<C, true> >(const locale&); 219 220 template 221 const moneypunct<C, false>& 222 use_facet<moneypunct<C, false> >(const locale&); 223 224 template 225 const money_put<C>& 226 use_facet<money_put<C> >(const locale&); 227 228 template 229 const money_get<C>& 230 use_facet<money_get<C> >(const locale&); 231 232 template 233 const __timepunct<C>& 234 use_facet<__timepunct<C> >(const locale&); 235 236 template 237 const time_put<C>& 238 use_facet<time_put<C> >(const locale&); 239 240 template 241 const time_get<C>& 242 use_facet<time_get<C> >(const locale&); 243 244 template 245 const messages<C>& 246 use_facet<messages<C> >(const locale&); 247 248 // has_facet 249 template 250 bool 251 has_facet<ctype<C> >(const locale&); 252 253 template 254 bool 255 has_facet<codecvt<C, char, mbstate_t> >(const locale&); 256 257 template 258 bool 259 has_facet<collate<C> >(const locale&); 260 261 template 262 bool 263 has_facet<numpunct<C> >(const locale&); 264 265 template 266 bool 267 has_facet<num_put<C> >(const locale&); 268 269 template 270 bool 271 has_facet<num_get<C> >(const locale&); 272 273 template 274 bool 275 has_facet<moneypunct<C> >(const locale&); 276 277 template 278 bool 279 has_facet<money_put<C> >(const locale&); 280 281 template 282 bool 283 has_facet<money_get<C> >(const locale&); 284 285 template 286 bool 287 has_facet<__timepunct<C> >(const locale&); 288 289 template 290 bool 291 has_facet<time_put<C> >(const locale&); 292 293 template 294 bool 295 has_facet<time_get<C> >(const locale&); 296 297 template 298 bool 299 has_facet<messages<C> >(const locale&); 300 301 302 // locale functions. 303 template 304 C* 305 __add_grouping<C>(C*, C, char const*, size_t, 306 C const*, C const*); 307 308 template class __pad<C, char_traits<C> >; 309 310 template 311 int 312 __int_to_char(C*, unsigned long, const C*, 313 ios_base::fmtflags, bool); 314 315 #ifdef _GLIBCXX_USE_LONG_LONG 316 template 317 int 318 __int_to_char(C*, unsigned long long, const C*, 319 ios_base::fmtflags, bool); 320 #endif 321 322 _GLIBCXX_END_NAMESPACE_VERSION 323 } // namespace 324 325 // XXX GLIBCXX_ABI Deprecated 326 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined C_is_char 327 328 #define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ 329 extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) 330 331 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, 332 _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); 333 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, 334 _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); 335 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, 336 _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); 337 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, 338 _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); 339 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, 340 _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); 341 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, 342 _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); 343 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_, 344 _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_); 345 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_, 346 _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_); 347 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_, 348 _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_); 349 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_, 350 _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_); 351 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_, 352 _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_); 353 _GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_, 354 _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_); 355 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs, 356 _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs); 357 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs, 358 _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs); 359 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs, 360 _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs); 361 _GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs, 362 _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs); 363 364 #endif // _GLIBCXX_LONG_DOUBLE_COMPAT 365