📄 locale_facets.tcc
字号:
if (__pos == sizeof(__true) - sizeof(char_type)) { __err |= ios_base::goodbit; __v = 1; } } } if (__beg == __end) __err |= ios_base::eofbit; if (!((__err & ios_base::goodbit) == 0 || __err & ios_base::eofbit)) __err |= ios_base::failbit; } return __beg; } #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, short& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types.x char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; long __vl = strtol(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0 && __vl >= SHRT_MIN && __vl <= SHRT_MAX) { __v = static_cast<short>(__vl); __err = ios_base::goodbit; } else __err |= ios_base::failbit; return __beg; } template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, int& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32] = {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; long __vl = strtol(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0 && __vl >= INT_MIN && __vl <= INT_MAX) { __v = static_cast<int>(__vl); __err = ios_base::goodbit; } else __err |= ios_base::failbit; return __beg; }#endif template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, long& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = strtol(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; } #ifdef _GLIBCPP_USE_LONG_LONG template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, long long& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = strtoll(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; }#endif template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, unsigned short& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; unsigned long __vl = strtoul(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0 && __vl <= USHRT_MAX) { __v = static_cast<unsigned short>(__vl); __err = ios_base::goodbit; } else __err |= ios_base::failbit; return __beg; } template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, unsigned int& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; unsigned long __vl = strtoul(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0 && __vl <= UINT_MAX) { __v = static_cast<unsigned int>(__vl); __err = ios_base::goodbit; } else __err |= ios_base::failbit; return __beg; } template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, unsigned long& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32] = {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = strtoul(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; }#ifdef _GLIBCPP_USE_LONG_LONG template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, unsigned long long& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = strtoull(__xtrc, &__sanity, __base); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; }#endif template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, float& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 256 for // floating-point types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, true); // Stage 2: convert and store results. char* __sanity; errno = 0;#ifdef HAVE_STRTOF __v = strtof(__xtrc, &__sanity);#else __v = static_cast<float>(strtod(__xtrc, &__sanity));#endif if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; } template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, double& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 256 for // floating-point types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, true); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = strtod(__xtrc, &__sanity); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; }#if defined(HAVE_STRTOLD) && !defined(__hpux) template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, long double& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 256 for // floating-point types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, true); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = strtold(__xtrc, &__sanity); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; }#else template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, long double& __v) const { // Stage 1: extract char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, true); // Stage 2: determine a conversion specifier. ios_base::fmtflags __basefield = __io.flags() & ios_base::basefield; const char* __conv; if (__basefield == ios_base::oct) __conv = "%Lo"; else if (__basefield == ios_base::hex) __conv = "%LX"; else if (__basefield == 0) __conv = "%Li"; else __conv = "%Lg"; // Stage 3: store results. int __p = sscanf(__xtrc, __conv, &__v); if (__p && static_cast<__traits_type::int_type>(__p) != __traits_type::eof()) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; }#endif template<typename _CharT, typename _InIter> _InIter num_get<_CharT, _InIter>:: do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, void*& __v) const { // Stage 1: extract and determine the conversion specifier. // Assuming leading zeros eliminated, thus the size of 32 for // integral types. char __xtrc[32]= {'\0'}; int __base; _M_extract(__beg, __end, __io, __err, __xtrc, __base, false); // Stage 2: convert and store results. char* __sanity; errno = 0; __v = reinterpret_cast<void*>(strtol(__xtrc, &__sanity, __base)); if (__sanity != __xtrc && *__sanity == '\0' && errno == 0) __err = ios_base::goodbit; else __err |= ios_base::failbit; return __beg; } template <typename _CharT, typename _OutIter> locale::id num_put<_CharT, _OutIter>::id; // _S_fill is specialized for ostreambuf_iterator, random access iterator. template <typename _CharT, typename _OutIter> inline _OutIter _S_fill(_OutIter __s, _CharT __fill, int __padding); template <typename _CharT, typename _RaIter> _RaIter _S_fill(_RaIter __s, _CharT __fill, int __padding, random_access_iterator_tag) { fill_n(__s, __fill); return __s + __padding; } template <typename _CharT, typename _OutIter, typename _Tag> _OutIter _S_fill(_OutIter __s, _CharT __fill, int __padding, _Tag) { while (--__padding >= 0) { *__s = __fill; ++__s; } return __s; } template <typename _CharT, typename _OutIter> inline _OutIter _S_fill(_OutIter __s, _CharT __fill, int __padding) { return _S_fill(__s, __fill, __padding, iterator_traits<_OutIter>::iterator_category()); } template <typename _CharT, typename _OutIter> _OutIter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -