Commit 1f3adac2 by Paolo Carlini Committed by Paolo Carlini

locale_facets.tcc (num_get::_M_extract_int): Slightly streamline the code…

locale_facets.tcc (num_get::_M_extract_int): Slightly streamline the code dealing with overflows and the parsing of the sign.

2003-12-09  Paolo Carlini  <pcarlini@suse.de>

	* include/bits/locale_facets.tcc (num_get::_M_extract_int):
	Slightly streamline the code dealing with overflows and the
	parsing of the sign.

From-SVN: r74476
parent 579ed987
2003-12-09 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc (num_get::_M_extract_int):
Slightly streamline the code dealing with overflows and the
parsing of the sign.
2003-12-09 Bernardo Innocenti <bernie@develer.com> 2003-12-09 Bernardo Innocenti <bernie@develer.com>
* include/ext/algorithm, include/ext/debug_allocator.h, * include/ext/algorithm, include/ext/debug_allocator.h,
......
...@@ -283,9 +283,9 @@ namespace std ...@@ -283,9 +283,9 @@ namespace std
bool __negative = false; bool __negative = false;
if (__beg != __end) if (__beg != __end)
{ {
__negative = __traits_type::eq(*__beg, __lit[_S_iminus]); if (numeric_limits<_ValueT>::is_signed)
if (__negative && numeric_limits<_ValueT>::is_signed __negative = __traits_type::eq(*__beg, __lit[_S_iminus]);
|| __traits_type::eq(*__beg, __lit[_S_iplus])) if (__negative || __traits_type::eq(*__beg, __lit[_S_iplus]))
++__beg; ++__beg;
} }
...@@ -353,8 +353,7 @@ namespace std ...@@ -353,8 +353,7 @@ namespace std
else else
{ {
const _ValueT __new_result = __result * __base - __digit; const _ValueT __new_result = __result * __base - __digit;
if (__result) __overflow |= __new_result > __result;
__overflow |= __new_result >= __result;
__result = __new_result; __result = __new_result;
++__sep_pos; ++__sep_pos;
__found_num = true; __found_num = true;
...@@ -398,8 +397,7 @@ namespace std ...@@ -398,8 +397,7 @@ namespace std
else else
{ {
const _ValueT __new_result = __result * __base + __digit; const _ValueT __new_result = __result * __base + __digit;
if (__result) __overflow |= __new_result < __result;
__overflow |= __new_result <= __result;
__result = __new_result; __result = __new_result;
++__sep_pos; ++__sep_pos;
__found_num = true; __found_num = true;
...@@ -436,8 +434,8 @@ namespace std ...@@ -436,8 +434,8 @@ namespace std
__err |= ios_base::failbit; __err |= ios_base::failbit;
} }
if (!(__err & ios_base::failbit) if (!(__err & ios_base::failbit) && !__overflow
&& !__overflow && __found_num) && __found_num)
__v = __result; __v = __result;
else else
__err |= ios_base::failbit; __err |= ios_base::failbit;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment