[PPL-devel] [GIT] ppl/ppl(ppl-0_11-branch): Added missing conversions.
Roberto Bagnara
bagnara at cs.unipr.it
Mon Aug 2 21:55:55 CEST 2010
Module: ppl/ppl
Branch: ppl-0_11-branch
Commit: b397097be829089e5306d0fda548ca097f1483e7
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b397097be829089e5306d0fda548ca097f1483e7
Author: Roberto Bagnara <bagnara at cs.unipr.it>
Date: Mon Aug 2 19:45:48 2010 +0200
Added missing conversions.
---
src/checked_int.inlines.hh | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/src/checked_int.inlines.hh b/src/checked_int.inlines.hh
index 79985cd..465dfcf 100644
--- a/src/checked_int.inlines.hh
+++ b/src/checked_int.inlines.hh
@@ -1178,7 +1178,8 @@ add_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
}
if (exp >= sizeof(Type) * CHAR_BIT)
return set_pos_overflow_int<To_Policy>(to, dir);
- return add_unsigned_int<To_Policy, From_Policy, void>(to, x, Type(1) << exp, dir);
+ Type n = Type(1) << exp;
+ return add_unsigned_int<To_Policy, From_Policy, void>(to, x, n, dir);
}
template <typename To_Policy, typename From_Policy, typename Type>
@@ -1191,9 +1192,14 @@ add_2exp_signed_int(Type& to, const Type x, unsigned int exp,
}
if (exp >= sizeof(Type) * CHAR_BIT)
return set_pos_overflow_int<To_Policy>(to, dir);
- if (exp == sizeof(Type) * CHAR_BIT - 1)
- return sub_signed_int<To_Policy, From_Policy, void>(to, x, -2 * (Type(1) << (exp - 1)), dir);
- return add_signed_int<To_Policy, From_Policy, void>(to, x, Type(1) << exp, dir);
+ if (exp == sizeof(Type) * CHAR_BIT - 1) {
+ Type n = -2 * (Type(1) << (exp - 1));
+ return sub_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+ }
+ else {
+ Type n = Type(1) << exp;
+ return add_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+ }
}
template <typename To_Policy, typename From_Policy, typename Type>
@@ -1206,7 +1212,8 @@ sub_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
}
if (exp >= sizeof(Type) * CHAR_BIT)
return set_neg_overflow_int<To_Policy>(to, dir);
- return sub_unsigned_int<To_Policy, From_Policy, void>(to, x, Type(1) << exp, dir);
+ Type n = Type(1) << exp;
+ return sub_unsigned_int<To_Policy, From_Policy, void>(to, x, n, dir);
}
template <typename To_Policy, typename From_Policy, typename Type>
@@ -1219,9 +1226,14 @@ sub_2exp_signed_int(Type& to, const Type x, unsigned int exp,
}
if (exp >= sizeof(Type) * CHAR_BIT)
return set_neg_overflow_int<To_Policy>(to, dir);
- if (exp == sizeof(Type) * CHAR_BIT - 1)
- return add_signed_int<To_Policy, From_Policy, void>(to, x, -2 * (Type(1) << (exp - 1)), dir);
- return sub_signed_int<To_Policy, From_Policy, void>(to, x, Type(1) << exp, dir);
+ if (exp == sizeof(Type) * CHAR_BIT - 1) {
+ Type n = -2 * (Type(1) << (exp - 1));
+ return add_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+ }
+ else {
+ Type n = Type(1) << exp;
+ return sub_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+ }
}
template <typename To_Policy, typename From_Policy, typename Type>
More information about the PPL-devel
mailing list