From: Paolo Carlini Date: Fri, 24 Oct 2003 11:20:55 +0000 (+0000) Subject: locale_facets.tcc (money_get::do_get(..., string_type&): Disregard the previous commit... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=14628700040505e0a14342dd5bd1d1e1060ddc01;p=gcc.git locale_facets.tcc (money_get::do_get(..., string_type&): Disregard the previous commit... 2003-10-24 Paolo Carlini * include/bits/locale_facets.tcc (money_get::do_get(..., string_type&): Disregard the previous commit: doesn't hurt but doesn't accomplish anything useful either. This is the right one, speeding up greatly the function in case of early fail. From-SVN: r72888 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 16b221b8db5..7842ab56f78 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2003-10-24 Paolo Carlini + + * include/bits/locale_facets.tcc (money_get::do_get(..., + string_type&): Disregard the previous commit: doesn't hurt but + doesn't accomplish anything useful either. This is the right + one, speeding up greatly the function in case of early fail. + 2003-10-24 Paolo Carlini * include/bits/locale_facets.tcc (money_get::do_get(..., diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index ca9ad0510d6..f025c5125a9 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -1270,44 +1270,6 @@ namespace std } } - const char_type __zero = __ctype.widen('0'); - - // Strip leading zeros. - if (__tmp_units.size() > 1) - { - const size_type __first = __tmp_units.find_first_not_of(__zero); - const bool __only_zeros = __first == string_type::npos; - if (__first) - __tmp_units.erase(0, __only_zeros ? __tmp_units.size() - 1 - : __first); - } - - if (__tmp_units.size()) - { - // 22.2.6.1.2, p4 - if (__sign.size() && __sign == __neg_sign - && __tmp_units[0] != __zero) - __tmp_units.insert(__tmp_units.begin(), __ctype.widen('-')); - - // Test for grouping fidelity. - if (__grouping.size() && __grouping_tmp.size()) - { - if (!std::__verify_grouping(__grouping, __grouping_tmp)) - __testvalid = false; - } - - // Iff not enough digits were supplied after the decimal-point. - if (__testdecfound) - { - const int __frac = __intl ? __mpt.frac_digits() - : __mpf.frac_digits(); - if (__frac > 0 && __sep_pos != __frac) - __testvalid = false; - } - } - else - __testvalid = false; - // Need to get the rest of the sign characters, if they exist. const char_type __eof = static_cast(char_traits::eof()); if (__sign.size() > 1) @@ -1322,6 +1284,47 @@ namespace std __testvalid = false; } + if (__testvalid) + { + const char_type __zero = __ctype.widen('0'); + + // Strip leading zeros. + if (__tmp_units.size() > 1) + { + const size_type __first = __tmp_units.find_first_not_of(__zero); + const bool __only_zeros = __first == string_type::npos; + if (__first) + __tmp_units.erase(0, __only_zeros ? __tmp_units.size() - 1 + : __first); + } + + if (__tmp_units.size()) + { + // 22.2.6.1.2, p4 + if (__sign.size() && __sign == __neg_sign + && __tmp_units[0] != __zero) + __tmp_units.insert(__tmp_units.begin(), __ctype.widen('-')); + + // Test for grouping fidelity. + if (__grouping.size() && __grouping_tmp.size()) + { + if (!std::__verify_grouping(__grouping, __grouping_tmp)) + __testvalid = false; + } + + // Iff not enough digits were supplied after the decimal-point. + if (__testdecfound) + { + const int __frac = __intl ? __mpt.frac_digits() + : __mpf.frac_digits(); + if (__frac > 0 && __sep_pos != __frac) + __testvalid = false; + } + } + else + __testvalid = false; + } + // Iff no more characters are available. if (__c == __eof) __err |= ios_base::eofbit;