aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc26
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;