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    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)
    80       const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
    83       _CharT* __truename = 0;
    84       _CharT* __falsename = 0;
    87           const string& __g = __np.grouping();
    88           _M_grouping_size = __g.size();
    89           __grouping = 
new char[_M_grouping_size];
    90           __g.copy(__grouping, _M_grouping_size);
    91           _M_use_grouping = (_M_grouping_size
    92                              && static_cast<signed char>(__grouping[0]) > 0
    94                                  != __gnu_cxx::__numeric_traits<char>::__max));
    96           const basic_string<_CharT>& __tn = __np.truename();
    97           _M_truename_size = __tn.size();
    98           __truename = 
new _CharT[_M_truename_size];
    99           __tn.copy(__truename, _M_truename_size);
   101           const basic_string<_CharT>& __fn = __np.falsename();
   102           _M_falsename_size = __fn.size();
   103           __falsename = 
new _CharT[_M_falsename_size];
   104           __fn.copy(__falsename, _M_falsename_size);
   106           _M_decimal_point = __np.decimal_point();
   107           _M_thousands_sep = __np.thousands_sep();
   109           const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
   110           __ct.widen(__num_base::_S_atoms_out,
   111                      __num_base::_S_atoms_out
   112                      + __num_base::_S_oend, _M_atoms_out);
   113           __ct.widen(__num_base::_S_atoms_in,
   114                      __num_base::_S_atoms_in
   115                      + __num_base::_S_iend, _M_atoms_in);
   117           _M_grouping = __grouping;
   118           _M_truename = __truename;
   119           _M_falsename = __falsename;
   124           delete [] __grouping;
   125           delete [] __truename;
   126           delete [] __falsename;
   127           __throw_exception_again;
   140   __verify_grouping(
const char* __grouping, 
size_t __grouping_size,
   141                     const string& __grouping_tmp) 
throw ();
   143 _GLIBCXX_BEGIN_NAMESPACE_LDBL
   145   template<
typename _CharT, 
typename _InIter>
   146     _GLIBCXX_DEFAULT_ABI_TAG
   148     num_get<_CharT, _InIter>::
   149     _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
   152       typedef char_traits<_CharT>                       __traits_type;
   153       typedef __numpunct_cache<_CharT>                  __cache_type;
   154       __use_cache<__cache_type> __uc;
   155       const locale& __loc = __io._M_getloc();
   156       const __cache_type* __lc = __uc(__loc);
   157       const _CharT* __lit = __lc->_M_atoms_in;
   158       char_type __c = char_type();
   161       bool __testeof = __beg == __end;
   167           const bool __plus = __c == __lit[__num_base::_S_iplus];
   168           if ((__plus || __c == __lit[__num_base::_S_iminus])
   169               && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
   170               && !(__c == __lc->_M_decimal_point))
   172               __xtrc += __plus ? 
'+' : 
'-';
   173               if (++__beg != __end)
   181       bool __found_mantissa = 
false;
   185           if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
   186               || __c == __lc->_M_decimal_point)
   188           else if (__c == __lit[__num_base::_S_izero])
   190               if (!__found_mantissa)
   193                   __found_mantissa = 
true;
   197               if (++__beg != __end)
   207       bool __found_dec = 
false;
   208       bool __found_sci = 
false;
   209       string __found_grouping;
   210       if (__lc->_M_use_grouping)
   211         __found_grouping.reserve(32);
   212       const char_type* __lit_zero = __lit + __num_base::_S_izero;
   214       if (!__lc->_M_allocated)
   218             const int __digit = _M_find(__lit_zero, 10, __c);
   221                 __xtrc += 
'0' + __digit;
   222                 __found_mantissa = 
true;
   224             else if (__c == __lc->_M_decimal_point
   225                      && !__found_dec && !__found_sci)
   230             else if ((__c == __lit[__num_base::_S_ie] 
   231                       || __c == __lit[__num_base::_S_iE])
   232                      && !__found_sci && __found_mantissa)
   239                 if (++__beg != __end)
   242                     const bool __plus = __c == __lit[__num_base::_S_iplus];
   243                     if (__plus || __c == __lit[__num_base::_S_iminus])
   244                       __xtrc += __plus ? 
'+' : 
'-';
   257             if (++__beg != __end)
   267             if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
   269                 if (!__found_dec && !__found_sci)
   275                         __found_grouping += static_cast<char>(__sep_pos);
   289             else if (__c == __lc->_M_decimal_point)
   291                 if (!__found_dec && !__found_sci)
   296                     if (__found_grouping.size())
   297                       __found_grouping += static_cast<char>(__sep_pos);
   306                 const char_type* __q =
   307                   __traits_type::find(__lit_zero, 10, __c);
   310                     __xtrc += 
'0' + (__q - __lit_zero);
   311                     __found_mantissa = 
true;
   314                 else if ((__c == __lit[__num_base::_S_ie] 
   315                           || __c == __lit[__num_base::_S_iE])
   316                          && !__found_sci && __found_mantissa)
   319                     if (__found_grouping.size() && !__found_dec)
   320                       __found_grouping += static_cast<char>(__sep_pos);
   325                     if (++__beg != __end)
   328                         const bool __plus = __c == __lit[__num_base::_S_iplus];
   329                         if ((__plus || __c == __lit[__num_base::_S_iminus])
   330                             && !(__lc->_M_use_grouping
   331                                  && __c == __lc->_M_thousands_sep)
   332                             && !(__c == __lc->_M_decimal_point))
   333                       __xtrc += __plus ? 
'+' : 
'-';
   347             if (++__beg != __end)
   355       if (__found_grouping.size())
   358           if (!__found_dec && !__found_sci)
   359             __found_grouping += static_cast<char>(__sep_pos);
   361           if (!std::__verify_grouping(__lc->_M_grouping, 
   362                                       __lc->_M_grouping_size,
   370   template<
typename _CharT, 
typename _InIter>
   371     template<
typename _ValueT>
   372       _GLIBCXX_DEFAULT_ABI_TAG
   374       num_get<_CharT, _InIter>::
   375       _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
   378         typedef char_traits<_CharT>                         __traits_type;
   379         using __gnu_cxx::__add_unsigned;
   380         typedef typename __add_unsigned<_ValueT>::__type    __unsigned_type;
   381         typedef __numpunct_cache<_CharT>                    __cache_type;
   382         __use_cache<__cache_type> __uc;
   383         const locale& __loc = __io._M_getloc();
   384         const __cache_type* __lc = __uc(__loc);
   385         const _CharT* __lit = __lc->_M_atoms_in;
   386         char_type __c = char_type();
   392         int __base = __oct ? 8 : (__basefield == 
ios_base::hex ? 16 : 10);
   395         bool __testeof = __beg == __end;
   398         bool __negative = 
false;
   402             __negative = __c == __lit[__num_base::_S_iminus];
   403             if ((__negative || __c == __lit[__num_base::_S_iplus])
   404                 && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
   405                 && !(__c == __lc->_M_decimal_point))
   407                 if (++__beg != __end)
   416         bool __found_zero = 
false;
   420             if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
   421                 || __c == __lc->_M_decimal_point)
   423             else if (__c == __lit[__num_base::_S_izero] 
   424                      && (!__found_zero || __base == 10))
   428                 if (__basefield == 0)
   433             else if (__found_zero
   434                      && (__c == __lit[__num_base::_S_ix]
   435                          || __c == __lit[__num_base::_S_iX]))
   437                 if (__basefield == 0)
   441                     __found_zero = 
false;
   450             if (++__beg != __end)
   462         const size_t __len = (__base == 16 ? __num_base::_S_iend
   463                               - __num_base::_S_izero : __base);
   466         typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits;
   467         string __found_grouping;
   468         if (__lc->_M_use_grouping)
   469           __found_grouping.reserve(32);
   470         bool __testfail = 
false;
   471         bool __testoverflow = 
false;
   472         const __unsigned_type __max =
   473           (__negative && __num_traits::__is_signed)
   474           ? -static_cast<__unsigned_type>(__num_traits::__min)
   475           : __num_traits::__max;
   476         const __unsigned_type __smax = __max / __base;
   477         __unsigned_type __result = 0;
   479         const char_type* __lit_zero = __lit + __num_base::_S_izero;
   481         if (!__lc->_M_allocated)
   485               __digit = _M_find(__lit_zero, __len, __c);
   489               if (__result > __smax)
   490                 __testoverflow = 
true;
   494                   __testoverflow |= __result > __max - __digit;
   499               if (++__beg != __end)
   509               if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
   515                       __found_grouping += static_cast<char>(__sep_pos);
   524               else if (__c == __lc->_M_decimal_point)
   528                   const char_type* __q =
   529                     __traits_type::find(__lit_zero, __len, __c);
   533                   __digit = __q - __lit_zero;
   536                   if (__result > __smax)
   537                     __testoverflow = 
true;
   541                       __testoverflow |= __result > __max - __digit;
   547               if (++__beg != __end)
   555         if (__found_grouping.size())
   558             __found_grouping += static_cast<char>(__sep_pos);
   560             if (!std::__verify_grouping(__lc->_M_grouping,
   561                                         __lc->_M_grouping_size,
   568         if ((!__sep_pos && !__found_zero && !__found_grouping.size())
   574         else if (__testoverflow)
   576             if (__negative && __num_traits::__is_signed)
   577               __v = __num_traits::__min;
   579               __v = __num_traits::__max;
   583           __v = __negative ? -__result : __result;
   592   template<
typename _CharT, 
typename _InIter>
   596            ios_base::iostate& __err, 
bool& __v)
 const   604           __beg = _M_extract_int(__beg, __end, __io, __err, __l);
   605           if (__l == 0 || __l == 1)
   620           typedef __numpunct_cache<_CharT>  __cache_type;
   621           __use_cache<__cache_type> __uc;
   623           const __cache_type* __lc = __uc(__loc);
   627           bool __donef = __lc->_M_falsename_size == 0;
   628           bool __donet = __lc->_M_truename_size == 0;
   629           bool __testeof = 
false;
   631           while (!__donef || !__donet)
   642                 __testf = __c == __lc->_M_falsename[__n];
   644               if (!__testf && __donet)
   648                 __testt = __c == __lc->_M_truename[__n];
   650               if (!__testt && __donef)
   653               if (!__testt && !__testf)
   659               __donef = !__testf || __n >= __lc->_M_falsename_size;
   660               __donet = !__testt || __n >= __lc->_M_truename_size;
   662           if (__testf && __n == __lc->_M_falsename_size && __n)
   665               if (__testt && __n == __lc->_M_truename_size)
   670           else if (__testt && __n == __lc->_M_truename_size && __n)
   688   template<
typename _CharT, 
typename _InIter>
   692            ios_base::iostate& __err, 
float& __v)
 const   696       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
   697       std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
   703   template<
typename _CharT, 
typename _InIter>
   707            ios_base::iostate& __err, 
double& __v)
 const   711       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
   712       std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
   718 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__   719   template<
typename _CharT, 
typename _InIter>
   723              ios_base::iostate& __err, 
double& __v)
 const   727       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
   728       std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
   735   template<
typename _CharT, 
typename _InIter>
   739            ios_base::iostate& __err, 
long double& __v)
 const   743       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
   744       std::__convert_to_v(__xtrc.
c_str(), __v, __err, _S_get_c_locale());
   750   template<
typename _CharT, 
typename _InIter>
   754            ios_base::iostate& __err, 
void*& __v)
 const   757       typedef ios_base::fmtflags        fmtflags;
   758       const fmtflags __fmt = __io.
flags();
   761       typedef __gnu_cxx::__conditional_type<(
sizeof(
void*)
   762                                              <= 
sizeof(
unsigned long)),
   763         unsigned long, 
unsigned long long>::__type _UIntPtrType;       
   766       __beg = _M_extract_int(__beg, __end, __io, __err, __ul);
   771       __v = reinterpret_cast<void*>(__ul);
   777   template<
typename _CharT, 
typename _OutIter>
   781            _CharT* __new, 
const _CharT* __cs, 
int& __len)
 const   785       __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new,
   787       __len = static_cast<int>(__w);
   790 _GLIBCXX_END_NAMESPACE_LDBL
   792   template<
typename _CharT, 
typename _ValueT>
   794     __int_to_char(_CharT* __bufend, _ValueT __v, 
const _CharT* __lit,
   797       _CharT* __buf = __bufend;
   798       if (__builtin_expect(__dec, 
true))
   803               *--__buf = __lit[(__v % 10) + __num_base::_S_odigits];
   813               *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits];
   822           const int __case_offset = __uppercase ? __num_base::_S_oudigits
   823                                                 : __num_base::_S_odigits;
   826               *--__buf = __lit[(__v & 0xf) + __case_offset];
   831       return __bufend - __buf;
   834 _GLIBCXX_BEGIN_NAMESPACE_LDBL
   836   template<
typename _CharT, 
typename _OutIter>
   838     num_put<_CharT, _OutIter>::
   839     _M_group_int(
const char* __grouping, 
size_t __grouping_size, _CharT __sep,
   840                  ios_base&, _CharT* __new, _CharT* __cs, 
int& __len)
 const   842       _CharT* __p = std::__add_grouping(__new, __sep, __grouping,
   843                                         __grouping_size, __cs, __cs + __len);
   847   template<
typename _CharT, 
typename _OutIter>
   848     template<
typename _ValueT>
   850       num_put<_CharT, _OutIter>::
   851       _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill,
   854         using __gnu_cxx::__add_unsigned;
   855         typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
   856         typedef __numpunct_cache<_CharT>                     __cache_type;
   857         __use_cache<__cache_type> __uc;
   858         const locale& __loc = __io._M_getloc();
   859         const __cache_type* __lc = __uc(__loc);
   860         const _CharT* __lit = __lc->_M_atoms_out;
   864         const int __ilen = 5 * 
sizeof(_ValueT);
   865         _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
   873         const __unsigned_type __u = ((__v > 0 || !__dec)
   874                                      ? __unsigned_type(__v)
   875                                      : -__unsigned_type(__v));
   876         int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
   877         __cs += __ilen - __len;
   880         if (__lc->_M_use_grouping)
   884             _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
   887             _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
   888                          __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len);
   893         if (__builtin_expect(__dec, 
true))
   899                     && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
   900                   *--__cs = __lit[__num_base::_S_oplus], ++__len;
   903               *--__cs = __lit[__num_base::_S_ominus], ++__len;
   908               *--__cs = __lit[__num_base::_S_odigits], ++__len;
   913                 *--__cs = __lit[__num_base::_S_ox + __uppercase];
   915                 *--__cs = __lit[__num_base::_S_odigits];
   922         if (__w > static_cast<streamsize>(__len))
   924             _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
   926             _M_pad(__fill, __w, __io, __cs3, __cs, __len);
   933         return std::__write(__s, __cs, __len);
   936   template<
typename _CharT, 
typename _OutIter>
   938     num_put<_CharT, _OutIter>::
   939     _M_group_float(
const char* __grouping, 
size_t __grouping_size,
   940                    _CharT __sep, 
const _CharT* __p, _CharT* __new,
   941                    _CharT* __cs, 
int& __len)
 const   946       const int __declen = __p ? __p - __cs : __len;
   947       _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping,
   949                                          __cs, __cs + __declen);
   952       int __newlen = __p2 - __new;
   955           char_traits<_CharT>::copy(__p2, __p, __len - __declen);
   956           __newlen += __len - __declen;
   971   template<
typename _CharT, 
typename _OutIter>
   972     template<
typename _ValueT>
   974       num_put<_CharT, _OutIter>::
   975       _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, 
char __mod,
   978         typedef __numpunct_cache<_CharT>                __cache_type;
   979         __use_cache<__cache_type> __uc;
   980         const locale& __loc = __io._M_getloc();
   981         const __cache_type* __lc = __uc(__loc);
   984         const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision();
   986         const int __max_digits =
   987           __gnu_cxx::__numeric_traits<_ValueT>::__digits10;
   993         __num_base::_S_format_float(__io, __fbuf, __mod);
   995 #if _GLIBCXX_USE_C99_STDIO   997         const bool __use_prec =
  1002         int __cs_size = __max_digits * 3;
  1003         char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
  1005           __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
  1006                                         __fbuf, __prec, __v);
  1008           __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
  1012         if (__len >= __cs_size)
  1014             __cs_size = __len + 1;
  1015             __cs = static_cast<char*>(__builtin_alloca(__cs_size));
  1017               __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
  1018                                             __fbuf, __prec, __v);
  1020               __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
  1026         const int __max_exp =
  1027           __gnu_cxx::__numeric_traits<_ValueT>::__max_exponent10;
  1035         const int __cs_size = __fixed ? __max_exp + __prec + 4
  1036                                       : __max_digits * 2 + __prec;
  1037         char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
  1038         __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, __fbuf, 
  1044         const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
  1046         _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
  1048         __ctype.widen(__cs, __cs + __len, __ws);
  1052         const char* __p = char_traits<char>::find(__cs, __len, 
'.');
  1055             __wp = __ws + (__p - __cs);
  1056             *__wp = __lc->_M_decimal_point;
  1062         if (__lc->_M_use_grouping
  1063             && (__wp || __len < 3 || (__cs[1] <= 
'9' && __cs[2] <= 
'9'  1064                                       && __cs[1] >= 
'0' && __cs[2] >= 
'0')))
  1068             _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
  1072             if (__cs[0] == 
'-' || __cs[0] == 
'+')
  1079             _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size,
  1080                            __lc->_M_thousands_sep, __wp, __ws2 + __off,
  1081                            __ws + __off, __len);
  1089         if (__w > static_cast<streamsize>(__len))
  1091             _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
  1093             _M_pad(__fill, __w, __io, __ws3, __ws, __len);
  1100         return std::__write(__s, __ws, __len);
  1103   template<
typename _CharT, 
typename _OutIter>
  1108       const ios_base::fmtflags __flags = __io.
flags();
  1111           const long __l = __v;
  1112           __s = _M_insert_int(__s, __io, __fill, __l);
  1116           typedef __numpunct_cache<_CharT>              __cache_type;
  1117           __use_cache<__cache_type> __uc;
  1119           const __cache_type* __lc = __uc(__loc);
  1121           const _CharT* __name = __v ? __lc->_M_truename
  1122                                      : __lc->_M_falsename;
  1123           int __len = __v ? __lc->_M_truename_size
  1124                           : __lc->_M_falsename_size;
  1127           if (__w > static_cast<streamsize>(__len))
  1131                 = static_cast<_CharT*>(__builtin_alloca(
sizeof(_CharT)
  1139                   __s = std::__write(__s, __name, __len);
  1140                   __s = std::__write(__s, __ps, __plen);
  1144                   __s = std::__write(__s, __ps, __plen);
  1145                   __s = std::__write(__s, __name, __len);
  1150           __s = std::__write(__s, __name, __len);
  1155   template<
typename _CharT, 
typename _OutIter>
  1159     { 
return _M_insert_float(__s, __io, __fill, 
char(), __v); }
  1161 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__  1162   template<
typename _CharT, 
typename _OutIter>
  1165     __do_put(iter_type __s, 
ios_base& __io, char_type __fill, 
double __v)
 const  1166     { 
return _M_insert_float(__s, __io, __fill, 
char(), __v); }
  1169   template<
typename _CharT, 
typename _OutIter>
  1173            long double __v)
 const  1174     { 
return _M_insert_float(__s, __io, __fill, 
'L', __v); }
  1176   template<
typename _CharT, 
typename _OutIter>
  1180            const void* __v)
 const  1182       const ios_base::fmtflags __flags = __io.
flags();
  1187       typedef __gnu_cxx::__conditional_type<(
sizeof(
const void*)
  1188                                              <= 
sizeof(
unsigned long)),
  1189         unsigned long, 
unsigned long long>::__type _UIntPtrType;       
  1191       __s = _M_insert_int(__s, __io, __fill,
  1192                           reinterpret_cast<_UIntPtrType>(__v));
  1193       __io.
flags(__flags);
  1197 _GLIBCXX_END_NAMESPACE_LDBL
  1206   template<
typename _CharT, 
typename _Traits>
  1208     __pad<_CharT, _Traits>::_S_pad(
ios_base& __io, _CharT __fill,
  1209                                    _CharT* __news, 
const _CharT* __olds,
  1212       const size_t __plen = static_cast<size_t>(__newlen - __oldlen);
  1218           _Traits::copy(__news, __olds, __oldlen);
  1219           _Traits::assign(__news + __oldlen, __plen, __fill);
  1230           const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
  1232           if (__ctype.widen(
'-') == __olds[0]
  1233               || __ctype.widen(
'+') == __olds[0])
  1235               __news[0] = __olds[0];
  1239           else if (__ctype.widen(
'0') == __olds[0]
  1241                    && (__ctype.widen(
'x') == __olds[1]
  1242                        || __ctype.widen(
'X') == __olds[1]))
  1244               __news[0] = __olds[0];
  1245               __news[1] = __olds[1];
  1251       _Traits::assign(__news, __plen, __fill);
  1252       _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod);
  1255   template<
typename _CharT>
  1257     __add_grouping(_CharT* __s, _CharT __sep,
  1258                    const char* __gbeg, 
size_t __gsize,
  1259                    const _CharT* __first, 
const _CharT* __last)
  1264       while (__last - __first > __gbeg[__idx]
  1265              && static_cast<signed char>(__gbeg[__idx]) > 0
  1266              && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
  1268           __last -= __gbeg[__idx];
  1269           __idx < __gsize - 1 ? ++__idx : ++__ctr;
  1272       while (__first != __last)
  1273         *__s++ = *__first++;
  1278           for (
char __i = __gbeg[__idx]; __i > 0; --__i)
  1279             *__s++ = *__first++;
  1285           for (
char __i = __gbeg[__idx]; __i > 0; --__i)
  1286             *__s++ = *__first++;
  1294 #if _GLIBCXX_EXTERN_TEMPLATE  1295   extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct<char>;
  1296   extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct_byname<char>;
  1297   extern template class _GLIBCXX_NAMESPACE_LDBL num_get<char>;
  1298   extern template class _GLIBCXX_NAMESPACE_LDBL num_put<char>;
  1299   extern template class ctype_byname<char>;
  1303     use_facet<ctype<char> >(
const locale&);
  1306     const numpunct<char>&
  1307     use_facet<numpunct<char> >(
const locale&);
  1310     const num_put<char>&
  1311     use_facet<num_put<char> >(
const locale&);
  1314     const num_get<char>&
  1315     use_facet<num_get<char> >(
const locale&);
  1319     has_facet<ctype<char> >(
const locale&);
  1323     has_facet<numpunct<char> >(
const locale&);
  1327     has_facet<num_put<char> >(
const locale&);
  1331     has_facet<num_get<char> >(
const locale&);
  1333 #ifdef _GLIBCXX_USE_WCHAR_T  1334   extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct<wchar_t>;
  1335   extern template class _GLIBCXX_NAMESPACE_CXX11 numpunct_byname<wchar_t>;
  1336   extern template class _GLIBCXX_NAMESPACE_LDBL num_get<wchar_t>;
  1337   extern template class _GLIBCXX_NAMESPACE_LDBL num_put<wchar_t>;
  1338   extern template class ctype_byname<wchar_t>;
  1341     const ctype<wchar_t>&
  1342     use_facet<ctype<wchar_t> >(
const locale&);
  1345     const numpunct<wchar_t>&
  1346     use_facet<numpunct<wchar_t> >(
const locale&);
  1349     const num_put<wchar_t>&
  1350     use_facet<num_put<wchar_t> >(
const locale&);
  1353     const num_get<wchar_t>&
  1354     use_facet<num_get<wchar_t> >(
const locale&);
  1358     has_facet<ctype<wchar_t> >(
const locale&);
  1362     has_facet<numpunct<wchar_t> >(
const locale&);
  1366     has_facet<num_put<wchar_t> >(
const locale&);
  1370     has_facet<num_get<wchar_t> >(
const locale&);
  1374 _GLIBCXX_END_NAMESPACE_VERSION
 static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
virtual iter_type do_get(iter_type, iter_type, ios_base &, ios_base::iostate &, bool &) const
Numeric parsing.
static const fmtflags hex
Converts integer input or generates integer output in hexadecimal base.
static const iostate goodbit
Indicates all is well.
fmtflags flags() const
Access to format flags.
Primary class template num_get.This facet encapsulates the code to parse and return a number from a s...
The base of the I/O class hierarchy.This class defines everything that can be defined about I/O that ...
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
_Ios_Fmtflags fmtflags
This is a bitmask type.
static const fmtflags basefield
A mask of dec|oct|hex. Useful for the 2-arg form of setf.
void reserve(size_type __res_arg=0)
Attempt to preallocate enough memory for specified number of characters.
static const fmtflags uppercase
Replaces certain lowercase letters with their uppercase equivalents in generated output.
static const fmtflags showpos
Generates a + sign in non-negative generated numeric output.
_InIter iter_type
Public typedefs.
static const fmtflags fixed
Generate floating-point output in fixed-point notation.
static const fmtflags boolalpha
Insert/extract bool in alphabetic rather than numeric format.
static const fmtflags adjustfield
A mask of left|right|internal. Useful for the 2-arg form of setf.
static const fmtflags floatfield
A mask of scientific|fixed. Useful for the 2-arg form of setf.
static const fmtflags oct
Converts integer input or generates integer output in octal base.
static locale::id id
Numpunct facet id.
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
ISO C++ entities toplevel namespace is std.
_OutIter iter_type
Public typedefs.
static const fmtflags left
Adds fill characters on the right (final positions) of certain generated output. (I....
virtual iter_type do_put(iter_type __s, ios_base &__io, char_type __fill, bool __v) const
Numeric formatting.
Basis for explicit traits specializations.
const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
static const fmtflags showbase
Generates a prefix indicating the numeric base of generated integer output.
_CharT char_type
Public typedefs.
streamsize width() const
Flags access.
_Ios_Iostate iostate
This is a bitmask type.
static const fmtflags internal
Adds fill characters at a designated internal point in certain generated output, or identical to righ...
Container class for localization functionality.The locale class is first a class wrapper for C librar...
_CharT char_type
Public typedefs.
Primary class template num_put.This facet encapsulates the code to convert a number to a string....
const locale & _M_getloc() const
Locale access.