30 #ifndef _LOCALE_FACETS_TCC
31 #define _LOCALE_FACETS_TCC 1
33 #pragma GCC system_header
35 namespace std _GLIBCXX_VISIBILITY(default)
37 _GLIBCXX_BEGIN_NAMESPACE_VERSION
41 template<
typename _Facet>
45 operator() (
const locale& __loc)
const;
49 template<
typename _CharT>
50 struct __use_cache<__numpunct_cache<_CharT> >
52 const __numpunct_cache<_CharT>*
53 operator() (
const locale& __loc)
const
55 const size_t __i = numpunct<_CharT>::id._M_id();
56 const locale::facet** __caches = __loc._M_impl->_M_caches;
59 __numpunct_cache<_CharT>* __tmp = 0;
62 __tmp =
new __numpunct_cache<_CharT>;
63 __tmp->_M_cache(__loc);
68 __throw_exception_again;
70 __loc._M_impl->_M_install_cache(__tmp, __i);
72 return static_cast<const __numpunct_cache<_CharT>*
>(__caches[__i]);
76 template<
typename _CharT>
78 __numpunct_cache<_CharT>::_M_cache(
const locale& __loc)
82 const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
85 _CharT* __truename = 0;
86 _CharT* __falsename = 0;
89 _M_grouping_size = __np.grouping().size();
90 __grouping =
new char[_M_grouping_size];
91 __np.grouping().copy(__grouping, _M_grouping_size);
92 _M_grouping = __grouping;
93 _M_use_grouping = (_M_grouping_size
94 &&
static_cast<signed char>(_M_grouping[0]) > 0
96 != __gnu_cxx::__numeric_traits<char>::__max));
98 _M_truename_size = __np.truename().size();
99 __truename =
new _CharT[_M_truename_size];
100 __np.truename().copy(__truename, _M_truename_size);
101 _M_truename = __truename;
103 _M_falsename_size = __np.falsename().size();
104 __falsename =
new _CharT[_M_falsename_size];
105 __np.falsename().copy(__falsename, _M_falsename_size);
106 _M_falsename = __falsename;
108 _M_decimal_point = __np.decimal_point();
109 _M_thousands_sep = __np.thousands_sep();
111 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
112 __ct.widen(__num_base::_S_atoms_out,
113 __num_base::_S_atoms_out
114 + __num_base::_S_oend, _M_atoms_out);
115 __ct.widen(__num_base::_S_atoms_in,
116 __num_base::_S_atoms_in
117 + __num_base::_S_iend, _M_atoms_in);
121 delete [] __grouping;
122 delete [] __truename;
123 delete [] __falsename;
124 __throw_exception_again;
137 __verify_grouping(
const char* __grouping,
size_t __grouping_size,
138 const string& __grouping_tmp)
throw ();
140 _GLIBCXX_BEGIN_NAMESPACE_LDBL
142 template<
typename _CharT,
typename _InIter>
144 num_get<_CharT, _InIter>::
145 _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
148 typedef char_traits<_CharT> __traits_type;
149 typedef __numpunct_cache<_CharT> __cache_type;
150 __use_cache<__cache_type> __uc;
151 const locale& __loc = __io._M_getloc();
152 const __cache_type* __lc = __uc(__loc);
153 const _CharT* __lit = __lc->_M_atoms_in;
154 char_type __c = char_type();
157 bool __testeof = __beg == __end;
163 const bool __plus = __c == __lit[__num_base::_S_iplus];
164 if ((__plus || __c == __lit[__num_base::_S_iminus])
165 && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
166 && !(__c == __lc->_M_decimal_point))
168 __xtrc += __plus ?
'+' :
'-';
169 if (++__beg != __end)
177 bool __found_mantissa =
false;
181 if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
182 || __c == __lc->_M_decimal_point)
184 else if (__c == __lit[__num_base::_S_izero])
186 if (!__found_mantissa)
189 __found_mantissa =
true;
193 if (++__beg != __end)
203 bool __found_dec =
false;
204 bool __found_sci =
false;
205 string __found_grouping;
206 if (__lc->_M_use_grouping)
207 __found_grouping.reserve(32);
208 const char_type* __lit_zero = __lit + __num_base::_S_izero;
210 if (!__lc->_M_allocated)
214 const int __digit = _M_find(__lit_zero, 10, __c);
217 __xtrc +=
'0' + __digit;
218 __found_mantissa =
true;
220 else if (__c == __lc->_M_decimal_point
221 && !__found_dec && !__found_sci)
226 else if ((__c == __lit[__num_base::_S_ie]
227 || __c == __lit[__num_base::_S_iE])
228 && !__found_sci && __found_mantissa)
235 if (++__beg != __end)
238 const bool __plus = __c == __lit[__num_base::_S_iplus];
239 if (__plus || __c == __lit[__num_base::_S_iminus])
240 __xtrc += __plus ?
'+' :
'-';
253 if (++__beg != __end)
263 if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
265 if (!__found_dec && !__found_sci)
271 __found_grouping +=
static_cast<char>(__sep_pos);
285 else if (__c == __lc->_M_decimal_point)
287 if (!__found_dec && !__found_sci)
292 if (__found_grouping.size())
293 __found_grouping += static_cast<char>(__sep_pos);
302 const char_type* __q =
303 __traits_type::find(__lit_zero, 10, __c);
306 __xtrc +=
'0' + (__q - __lit_zero);
307 __found_mantissa =
true;
310 else if ((__c == __lit[__num_base::_S_ie]
311 || __c == __lit[__num_base::_S_iE])
312 && !__found_sci && __found_mantissa)
315 if (__found_grouping.size() && !__found_dec)
316 __found_grouping += static_cast<char>(__sep_pos);
321 if (++__beg != __end)
324 const bool __plus = __c == __lit[__num_base::_S_iplus];
325 if ((__plus || __c == __lit[__num_base::_S_iminus])
326 && !(__lc->_M_use_grouping
327 && __c == __lc->_M_thousands_sep)
328 && !(__c == __lc->_M_decimal_point))
329 __xtrc += __plus ?
'+' :
'-';
343 if (++__beg != __end)
351 if (__found_grouping.size())
354 if (!__found_dec && !__found_sci)
355 __found_grouping +=
static_cast<char>(__sep_pos);
357 if (!std::__verify_grouping(__lc->_M_grouping,
358 __lc->_M_grouping_size,
366 template<
typename _CharT,
typename _InIter>
367 template<
typename _ValueT>
369 num_get<_CharT, _InIter>::
370 _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
373 typedef char_traits<_CharT> __traits_type;
374 using __gnu_cxx::__add_unsigned;
375 typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
376 typedef __numpunct_cache<_CharT> __cache_type;
377 __use_cache<__cache_type> __uc;
378 const locale& __loc = __io._M_getloc();
379 const __cache_type* __lc = __uc(__loc);
380 const _CharT* __lit = __lc->_M_atoms_in;
381 char_type __c = char_type();
390 bool __testeof = __beg == __end;
393 bool __negative =
false;
397 __negative = __c == __lit[__num_base::_S_iminus];
398 if ((__negative || __c == __lit[__num_base::_S_iplus])
399 && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
400 && !(__c == __lc->_M_decimal_point))
402 if (++__beg != __end)
411 bool __found_zero =
false;
415 if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
416 || __c == __lc->_M_decimal_point)
418 else if (__c == __lit[__num_base::_S_izero]
419 && (!__found_zero || __base == 10))
423 if (__basefield == 0)
428 else if (__found_zero
429 && (__c == __lit[__num_base::_S_ix]
430 || __c == __lit[__num_base::_S_iX]))
432 if (__basefield == 0)
436 __found_zero =
false;
445 if (++__beg != __end)
457 const size_t __len = (__base == 16 ? __num_base::_S_iend
458 - __num_base::_S_izero :
__base);
461 string __found_grouping;
462 if (__lc->_M_use_grouping)
463 __found_grouping.reserve(32);
464 bool __testfail =
false;
465 bool __testoverflow =
false;
466 const __unsigned_type __max =
467 (__negative && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
468 ? -__gnu_cxx::__numeric_traits<_ValueT>::__min
469 : __gnu_cxx::__numeric_traits<_ValueT>::__max;
470 const __unsigned_type __smax = __max /
__base;
471 __unsigned_type __result = 0;
473 const char_type* __lit_zero = __lit + __num_base::_S_izero;
475 if (!__lc->_M_allocated)
479 __digit = _M_find(__lit_zero, __len, __c);
483 if (__result > __smax)
484 __testoverflow =
true;
488 __testoverflow |= __result > __max - __digit;
493 if (++__beg != __end)
503 if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
509 __found_grouping +=
static_cast<char>(__sep_pos);
518 else if (__c == __lc->_M_decimal_point)
522 const char_type* __q =
523 __traits_type::find(__lit_zero, __len, __c);
527 __digit = __q - __lit_zero;
530 if (__result > __smax)
531 __testoverflow =
true;
535 __testoverflow |= __result > __max - __digit;
541 if (++__beg != __end)
549 if (__found_grouping.size())
552 __found_grouping +=
static_cast<char>(__sep_pos);
554 if (!std::__verify_grouping(__lc->_M_grouping,
555 __lc->_M_grouping_size,
562 if ((!__sep_pos && !__found_zero && !__found_grouping.size())
568 else if (__testoverflow)
571 && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
572 __v = __gnu_cxx::__numeric_traits<_ValueT>::__min;
574 __v = __gnu_cxx::__numeric_traits<_ValueT>::__max;
578 __v = __negative ? -__result : __result;
587 template<
typename _CharT,
typename _InIter>
591 ios_base::iostate& __err,
bool& __v)
const
599 __beg = _M_extract_int(__beg, __end, __io, __err, __l);
600 if (__l == 0 || __l == 1)
615 typedef __numpunct_cache<_CharT> __cache_type;
616 __use_cache<__cache_type> __uc;
618 const __cache_type* __lc = __uc(__loc);
622 bool __donef = __lc->_M_falsename_size == 0;
623 bool __donet = __lc->_M_truename_size == 0;
624 bool __testeof =
false;
626 while (!__donef || !__donet)
637 __testf = __c == __lc->_M_falsename[__n];
639 if (!__testf && __donet)
643 __testt = __c == __lc->_M_truename[__n];
645 if (!__testt && __donef)
648 if (!__testt && !__testf)
654 __donef = !__testf || __n >= __lc->_M_falsename_size;
655 __donet = !__testt || __n >= __lc->_M_truename_size;
657 if (__testf && __n == __lc->_M_falsename_size && __n)
660 if (__testt && __n == __lc->_M_truename_size)
665 else if (__testt && __n == __lc->_M_truename_size && __n)
683 template<
typename _CharT,
typename _InIter>
687 ios_base::iostate& __err,
float& __v)
const
691 __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
692 std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
698 template<
typename _CharT,
typename _InIter>
702 ios_base::iostate& __err,
double& __v)
const
706 __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
707 std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
713 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
714 template<
typename _CharT,
typename _InIter>
718 ios_base::iostate& __err,
double& __v)
const
722 __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
723 std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
730 template<
typename _CharT,
typename _InIter>
734 ios_base::iostate& __err,
long double& __v)
const
738 __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
739 std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
745 template<
typename _CharT,
typename _InIter>
749 ios_base::iostate& __err,
void*& __v)
const
752 typedef ios_base::fmtflags fmtflags;
753 const fmtflags __fmt = __io.
flags();
756 typedef __gnu_cxx::__conditional_type<(
sizeof(
void*)
757 <=
sizeof(
unsigned long)),
758 unsigned long,
unsigned long long>::__type _UIntPtrType;
761 __beg = _M_extract_int(__beg, __end, __io, __err, __ul);
766 __v =
reinterpret_cast<void*
>(__ul);
772 template<
typename _CharT,
typename _OutIter>
776 _CharT* __new,
const _CharT* __cs,
int& __len)
const
780 __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new,
782 __len =
static_cast<int>(__w);
785 _GLIBCXX_END_NAMESPACE_LDBL
787 template<
typename _CharT,
typename _ValueT>
789 __int_to_char(_CharT* __bufend, _ValueT __v,
const _CharT* __lit,
792 _CharT* __buf = __bufend;
793 if (__builtin_expect(__dec,
true))
798 *--__buf = __lit[(__v % 10) + __num_base::_S_odigits];
808 *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits];
817 const int __case_offset = __uppercase ? __num_base::_S_oudigits
818 : __num_base::_S_odigits;
821 *--__buf = __lit[(__v & 0xf) + __case_offset];
826 return __bufend - __buf;
829 _GLIBCXX_BEGIN_NAMESPACE_LDBL
831 template<
typename _CharT,
typename _OutIter>
833 num_put<_CharT, _OutIter>::
834 _M_group_int(
const char* __grouping,
size_t __grouping_size, _CharT __sep,
835 ios_base&, _CharT* __new, _CharT* __cs,
int& __len)
const
837 _CharT* __p = std::__add_grouping(__new, __sep, __grouping,
838 __grouping_size, __cs, __cs + __len);
842 template<
typename _CharT,
typename _OutIter>
843 template<
typename _ValueT>
845 num_put<_CharT, _OutIter>::
846 _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill,
849 using __gnu_cxx::__add_unsigned;
850 typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
851 typedef __numpunct_cache<_CharT> __cache_type;
852 __use_cache<__cache_type> __uc;
853 const locale& __loc = __io._M_getloc();
854 const __cache_type* __lc = __uc(__loc);
855 const _CharT* __lit = __lc->_M_atoms_out;
859 const int __ilen = 5 *
sizeof(_ValueT);
860 _CharT* __cs =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
868 const __unsigned_type __u = ((__v > 0 || !__dec)
869 ? __unsigned_type(__v)
870 : -__unsigned_type(__v));
871 int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
872 __cs += __ilen - __len;
875 if (__lc->_M_use_grouping)
879 _CharT* __cs2 =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
882 _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
883 __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len);
888 if (__builtin_expect(__dec,
true))
894 && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
895 *--__cs = __lit[__num_base::_S_oplus], ++__len;
898 *--__cs = __lit[__num_base::_S_ominus], ++__len;
903 *--__cs = __lit[__num_base::_S_odigits], ++__len;
908 *--__cs = __lit[__num_base::_S_ox + __uppercase];
910 *--__cs = __lit[__num_base::_S_odigits];
917 if (__w > static_cast<streamsize>(__len))
919 _CharT* __cs3 =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
921 _M_pad(__fill, __w, __io, __cs3, __cs, __len);
928 return std::__write(__s, __cs, __len);
931 template<
typename _CharT,
typename _OutIter>
933 num_put<_CharT, _OutIter>::
934 _M_group_float(
const char* __grouping,
size_t __grouping_size,
935 _CharT __sep,
const _CharT* __p, _CharT* __new,
936 _CharT* __cs,
int& __len)
const
941 const int __declen = __p ? __p - __cs : __len;
942 _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping,
944 __cs, __cs + __declen);
947 int __newlen = __p2 - __new;
950 char_traits<_CharT>::copy(__p2, __p, __len - __declen);
951 __newlen += __len - __declen;
966 template<
typename _CharT,
typename _OutIter>
967 template<
typename _ValueT>
969 num_put<_CharT, _OutIter>::
970 _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill,
char __mod,
973 typedef __numpunct_cache<_CharT> __cache_type;
974 __use_cache<__cache_type> __uc;
975 const locale& __loc = __io._M_getloc();
976 const __cache_type* __lc = __uc(__loc);
979 const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision();
981 const int __max_digits =
982 __gnu_cxx::__numeric_traits<_ValueT>::__digits10;
988 __num_base::_S_format_float(__io, __fbuf, __mod);
990 #ifdef _GLIBCXX_USE_C99
993 int __cs_size = __max_digits * 3;
994 char* __cs =
static_cast<char*
>(__builtin_alloca(__cs_size));
995 __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
996 __fbuf, __prec, __v);
999 if (__len >= __cs_size)
1001 __cs_size = __len + 1;
1002 __cs =
static_cast<char*
>(__builtin_alloca(__cs_size));
1003 __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
1004 __fbuf, __prec, __v);
1009 const int __max_exp =
1010 __gnu_cxx::__numeric_traits<_ValueT>::__max_exponent10;
1018 const int __cs_size = __fixed ? __max_exp + __prec + 4
1019 : __max_digits * 2 + __prec;
1020 char* __cs =
static_cast<char*
>(__builtin_alloca(__cs_size));
1021 __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, __fbuf,
1027 const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
1029 _CharT* __ws =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
1031 __ctype.widen(__cs, __cs + __len, __ws);
1035 const char* __p = char_traits<char>::find(__cs, __len,
'.');
1038 __wp = __ws + (__p - __cs);
1039 *__wp = __lc->_M_decimal_point;
1045 if (__lc->_M_use_grouping
1046 && (__wp || __len < 3 || (__cs[1] <=
'9' && __cs[2] <=
'9'
1047 && __cs[1] >=
'0' && __cs[2] >=
'0')))
1051 _CharT* __ws2 =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
1055 if (__cs[0] ==
'-' || __cs[0] ==
'+')
1062 _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size,
1063 __lc->_M_thousands_sep, __wp, __ws2 + __off,
1064 __ws + __off, __len);
1072 if (__w > static_cast<streamsize>(__len))
1074 _CharT* __ws3 =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
1076 _M_pad(__fill, __w, __io, __ws3, __ws, __len);
1083 return std::__write(__s, __ws, __len);
1086 template<
typename _CharT,
typename _OutIter>
1091 const ios_base::fmtflags __flags = __io.
flags();
1094 const long __l = __v;
1095 __s = _M_insert_int(__s, __io, __fill, __l);
1099 typedef __numpunct_cache<_CharT> __cache_type;
1100 __use_cache<__cache_type> __uc;
1102 const __cache_type* __lc = __uc(__loc);
1104 const _CharT* __name = __v ? __lc->_M_truename
1105 : __lc->_M_falsename;
1106 int __len = __v ? __lc->_M_truename_size
1107 : __lc->_M_falsename_size;
1110 if (__w > static_cast<streamsize>(__len))
1114 =
static_cast<_CharT*
>(__builtin_alloca(
sizeof(_CharT)
1122 __s = std::__write(__s, __name, __len);
1123 __s = std::__write(__s, __ps, __plen);
1127 __s = std::__write(__s, __ps, __plen);
1128 __s = std::__write(__s, __name, __len);
1133 __s = std::__write(__s, __name, __len);
1138 template<
typename _CharT,
typename _OutIter>
1142 {
return _M_insert_float(__s, __io, __fill,
char(), __v); }
1144 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
1145 template<
typename _CharT,
typename _OutIter>
1148 __do_put(iter_type __s,
ios_base& __io, char_type __fill,
double __v)
const
1149 {
return _M_insert_float(__s, __io, __fill,
char(), __v); }
1152 template<
typename _CharT,
typename _OutIter>
1156 long double __v)
const
1157 {
return _M_insert_float(__s, __io, __fill,
'L', __v); }
1159 template<
typename _CharT,
typename _OutIter>
1163 const void* __v)
const
1165 const ios_base::fmtflags __flags = __io.
flags();
1166 const ios_base::fmtflags __fmt = ~(ios_base::basefield
1170 typedef __gnu_cxx::__conditional_type<(
sizeof(
const void*)
1171 <=
sizeof(
unsigned long)),
1172 unsigned long,
unsigned long long>::__type _UIntPtrType;
1174 __s = _M_insert_int(__s, __io, __fill,
1175 reinterpret_cast<_UIntPtrType>(__v));
1176 __io.
flags(__flags);
1180 _GLIBCXX_END_NAMESPACE_LDBL
1189 template<
typename _CharT,
typename _Traits>
1191 __pad<_CharT, _Traits>::_S_pad(
ios_base& __io, _CharT __fill,
1192 _CharT* __news,
const _CharT* __olds,
1195 const size_t __plen =
static_cast<size_t>(__newlen - __oldlen);
1201 _Traits::copy(__news, __olds, __oldlen);
1202 _Traits::assign(__news + __oldlen, __plen, __fill);
1213 const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
1215 if (__ctype.widen(
'-') == __olds[0]
1216 || __ctype.widen(
'+') == __olds[0])
1218 __news[0] = __olds[0];
1222 else if (__ctype.widen(
'0') == __olds[0]
1224 && (__ctype.widen(
'x') == __olds[1]
1225 || __ctype.widen(
'X') == __olds[1]))
1227 __news[0] = __olds[0];
1228 __news[1] = __olds[1];
1234 _Traits::assign(__news, __plen, __fill);
1235 _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod);
1238 template<
typename _CharT>
1240 __add_grouping(_CharT* __s, _CharT __sep,
1241 const char* __gbeg,
size_t __gsize,
1242 const _CharT* __first,
const _CharT* __last)
1247 while (__last - __first > __gbeg[__idx]
1248 && static_cast<signed char>(__gbeg[__idx]) > 0
1249 && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
1251 __last -= __gbeg[__idx];
1252 __idx < __gsize - 1 ? ++__idx : ++__ctr;
1255 while (__first != __last)
1256 *__s++ = *__first++;
1261 for (
char __i = __gbeg[__idx]; __i > 0; --__i)
1262 *__s++ = *__first++;
1268 for (
char __i = __gbeg[__idx]; __i > 0; --__i)
1269 *__s++ = *__first++;
1277 #if _GLIBCXX_EXTERN_TEMPLATE
1278 extern template class numpunct<char>;
1279 extern template class numpunct_byname<char>;
1280 extern template class _GLIBCXX_NAMESPACE_LDBL num_get<char>;
1281 extern template class _GLIBCXX_NAMESPACE_LDBL num_put<char>;
1282 extern template class ctype_byname<char>;
1286 use_facet<ctype<char> >(
const locale&);
1289 const numpunct<char>&
1290 use_facet<numpunct<char> >(
const locale&);
1293 const num_put<char>&
1294 use_facet<num_put<char> >(
const locale&);
1297 const num_get<char>&
1298 use_facet<num_get<char> >(
const locale&);
1302 has_facet<ctype<char> >(
const locale&);
1306 has_facet<numpunct<char> >(
const locale&);
1310 has_facet<num_put<char> >(
const locale&);
1314 has_facet<num_get<char> >(
const locale&);
1316 #ifdef _GLIBCXX_USE_WCHAR_T
1317 extern template class numpunct<wchar_t>;
1318 extern template class numpunct_byname<wchar_t>;
1319 extern template class _GLIBCXX_NAMESPACE_LDBL num_get<wchar_t>;
1320 extern template class _GLIBCXX_NAMESPACE_LDBL num_put<wchar_t>;
1321 extern template class ctype_byname<wchar_t>;
1324 const ctype<wchar_t>&
1325 use_facet<ctype<wchar_t> >(
const locale&);
1328 const numpunct<wchar_t>&
1329 use_facet<numpunct<wchar_t> >(
const locale&);
1332 const num_put<wchar_t>&
1333 use_facet<num_put<wchar_t> >(
const locale&);
1336 const num_get<wchar_t>&
1337 use_facet<num_get<wchar_t> >(
const locale&);
1341 has_facet<ctype<wchar_t> >(
const locale&);
1345 has_facet<numpunct<wchar_t> >(
const locale&);
1349 has_facet<num_put<wchar_t> >(
const locale&);
1353 has_facet<num_get<wchar_t> >(
const locale&);
1357 _GLIBCXX_END_NAMESPACE_VERSION
static const fmtflags basefield
A mask of dec|oct|hex. Useful for the 2-arg form of setf.
_CharT char_type
Public typedefs.
_Ios_Iostate iostate
This is a bitmask type.
virtual iter_type do_put(iter_type __s, ios_base &__io, char_type __fill, bool __v) const
Numeric formatting.
static const fmtflags showpos
Generates a + sign in non-negative generated numeric output.
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
_Ios_Fmtflags fmtflags
This is a bitmask type.
static const fmtflags adjustfield
A mask of left|right|internal. Useful for the 2-arg form of setf.
The base of the I/O class hierarchy.This class defines everything that can be defined about I/O that ...
static const fmtflags boolalpha
Insert/extract bool in alphabetic rather than numeric format.
static const iostate goodbit
Indicates all is well.
static const fmtflags oct
Converts integer input or generates integer output in octal base.
static const fmtflags showbase
Generates a prefix indicating the numeric base of generated integer output.
static const fmtflags fixed
Generate floating-point output in fixed-point notation.
_OutIter iter_type
Public typedefs.
Container class for localization functionality.The locale class is first a class wrapper for C librar...
Primary class template num_put.This facet encapsulates the code to convert a number to a string...
static const fmtflags uppercase
Replaces certain lowercase letters with their uppercase equivalents in generated output.
Basis for explicit traits specializations.
_CharT char_type
Public typedefs.
static const fmtflags hex
Converts integer input or generates integer output in hexadecimal base.
virtual iter_type do_get(iter_type, iter_type, ios_base &, ios_base::iostate &, bool &) const
Numeric parsing.
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
fmtflags flags() const
Access to format flags.
_Siter_base< _Iterator >::iterator_type __base(_Iterator __it)
streamsize width() const
Flags access.
Primary class template num_get.This facet encapsulates the code to parse and return a number from a s...
static const fmtflags internal
Adds fill characters at a designated internal point in certain generated output, or identical to righ...
static const fmtflags left
Adds fill characters on the right (final positions) of certain generated output. (I.e., the thing you print is flush left.)
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
void reserve(size_type __res_arg=0)
Attempt to preallocate enough memory for specified number of characters.
const locale & _M_getloc() const
Locale access.
_InIter iter_type
Public typedefs.