locale_facets.tcc (time_get<>::do_get_time, [...]): Use only once _M_extract_via_form...
authorPaolo Carlini <pcarlini@suse.de>
Sun, 13 Jun 2004 09:52:14 +0000 (09:52 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 13 Jun 2004 09:52:14 +0000 (09:52 +0000)
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).

From-SVN: r83059

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/locale_facets.tcc

index d1cde4b..1454a0d 100644 (file)
@@ -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.
index ea723fc..c732e09 100644 (file)
@@ -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;