This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[v3] Patchlet to num_get::do_get(bool&) for excess operator==
- From: Paolo Carlini <pcarlini at suse dot de>
- To: "'gcc-patches at gcc dot gnu dot org'" <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 04 Nov 2004 12:33:19 +0100
- Subject: [v3] Patchlet to num_get::do_get(bool&) for excess operator==
Hi,
same story, tested x86-linux, committed to mainline.
(performance-wise, this time too 3%-5%)
Paolo.
////////////
2004-11-04 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc (num_get<>::do_get(bool&)):
Evaluate __beg == __end the exact strict minimum number of times.
diff -urN libstdc++-v3-orig/include/bits/locale_facets.tcc libstdc++-v3/include/bits/locale_facets.tcc
--- libstdc++-v3-orig/include/bits/locale_facets.tcc 2004-11-02 23:12:30.000000000 +0100
+++ libstdc++-v3/include/bits/locale_facets.tcc 2004-11-04 12:24:01.000000000 +0100
@@ -687,7 +687,8 @@
bool __testf = true;
bool __testt = true;
size_t __n;
- for (__n = 0; __beg != __end; ++__n, ++__beg)
+ bool __testeof = __beg == __end;
+ for (__n = 0; !__testeof; ++__n)
{
const char_type __c = *__beg;
@@ -705,6 +706,9 @@
if (!__testf && !__testt)
break;
+
+ if (++__beg == __end)
+ __testeof = true;
}
if (__testf && __n == __lc->_M_falsename_size)
__v = 0;
@@ -713,7 +717,7 @@
else
__err |= ios_base::failbit;
- if (__beg == __end)
+ if (__testeof)
__err |= ios_base::eofbit;
}
return __beg;