diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_facets.tcc | 26 |
2 files changed, 19 insertions, 14 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index d1cde4b..1454a0d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2004-06-13 Paolo Carlini <pcarlini@suse.de> + + * include/bits/locale_facets.tcc (time_get<>::do_get_time, + time_get<>::do_get_date): Use only once _M_extract_via_format, + instead of going through "%X"/"%x" and calling it two times + (+ using widen). + 2004-06-12 Paolo Carlini <pcarlini@suse.de> * include/ext/algorithm: Trivial formatting fixes. diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index ea723fc..c732e09 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -1724,10 +1724,8 @@ namespace std time_get<_CharT, _InIter>::do_date_order() const { return time_base::no_order; } - // Recursively expand a strftime format string and parse it. Starts w/ %x - // and %X from do_get_time() and do_get_date(), which translate to a more - // specific string, which may contain yet more strings. I.e. %x => %r => - // %H:%M:%S => extracted characters. + // Expand a strftime format string and parse it. E.g., do_get_date() may + // pass %m/%d/%Y => extracted characters. template<typename _CharT, typename _InIter> _InIter time_get<_CharT, _InIter>:: @@ -2056,12 +2054,12 @@ namespace std do_get_time(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, tm* __tm) const { - _CharT __wcs[3]; - const char* __cs = "%X"; const locale& __loc = __io._M_getloc(); - ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); - __ctype.widen(__cs, __cs + 3, __wcs); - __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __wcs); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const char_type* __times[2]; + __tp._M_time_formats(__times); + __beg = _M_extract_via_format(__beg, __end, __io, __err, + __tm, __times[0]); if (__beg == __end) __err |= ios_base::eofbit; return __beg; @@ -2073,12 +2071,12 @@ namespace std do_get_date(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, tm* __tm) const { - _CharT __wcs[3]; - const char* __cs = "%x"; const locale& __loc = __io._M_getloc(); - ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); - __ctype.widen(__cs, __cs + 3, __wcs); - __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __wcs); + const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); + const char_type* __dates[2]; + __tp._M_date_formats(__dates); + __beg = _M_extract_via_format(__beg, __end, __io, __err, + __tm, __dates[0]); if (__beg == __end) __err |= ios_base::eofbit; return __beg; |