aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2003-12-02 18:30:42 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2003-12-02 18:30:42 +0000
commit17e15f7f3bac951cca622f52b0baac91aa2ba401 (patch)
tree768293df17c2e0932f06bd9ebdc0fff4176f88ec /libstdc++-v3/include
parent0548bb4aba154c468f2ea6b498089891415bf526 (diff)
downloadgcc-17e15f7f3bac951cca622f52b0baac91aa2ba401.zip
gcc-17e15f7f3bac951cca622f52b0baac91aa2ba401.tar.gz
gcc-17e15f7f3bac951cca622f52b0baac91aa2ba401.tar.bz2
locale_facets.tcc (time_get::do_get_year): Avoid using a basic_string and calling a full blown strtol (via __convert_to_v)...
2003-12-02 Paolo Carlini <pcarlini@suse.de> * include/bits/locale_facets.tcc (time_get::do_get_year): Avoid using a basic_string and calling a full blown strtol (via __convert_to_v) for simple 2 or 4 digits, base 10, positive integers; simplify. From-SVN: r74193
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc22
1 files changed, 9 insertions, 13 deletions
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 147a9bc..47696ac 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -1964,21 +1964,17 @@ namespace std
const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
size_t __i = 0;
- string __digits;
- for (; __i < 4 && __beg != __end
- && __ctype.is(ctype_base::digit, *__beg); ++__beg, ++__i)
- __digits += __ctype.narrow(*__beg, 0);
- if (__i == 2 || __i == 4)
+ int __value = 0;
+ for (; __beg != __end && __i < 4; ++__beg, ++__i)
{
- long __l;
- std::__convert_to_v(__digits.c_str(), __l, __err,
- _S_get_c_locale());
- if (!(__err & ios_base::failbit) && __l <= INT_MAX)
- {
- __l = __i == 2 ? __l : __l - 1900;
- __tm->tm_year = static_cast<int>(__l);
- }
+ const char __c = __ctype.narrow(*__beg, '*');
+ if (__c >= '0' && __c <= '9')
+ __value = __value * 10 + (__c - '0');
+ else
+ break;
}
+ if (__i == 2 || __i == 4)
+ __tm->tm_year = __i == 2 ? __value : __value - 1900;
else
__err |= ios_base::failbit;
if (__beg == __end)