changeset 16142:28610537b748 draft

(svn r20838) -Fix [FS#4136]: Cast '1' in bitmath functions to width of result before shifting.
author alberth <alberth@openttd.org>
date Wed, 22 Sep 2010 20:59:24 +0000
parents 738aa94d52d7
children 2e7602f11ec7
files src/core/bitmath_func.hpp
diffstat 1 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/bitmath_func.hpp
+++ b/src/core/bitmath_func.hpp
@@ -31,7 +31,7 @@
 template <typename T>
 static FORCEINLINE uint GB(const T x, const uint8 s, const uint8 n)
 {
-	return (x >> s) & ((1U << n) - 1);
+	return (x >> s) & (((T)1U << n) - 1);
 }
 
 /**
@@ -55,7 +55,7 @@
 template <typename T, typename U>
 static FORCEINLINE T SB(T &x, const uint8 s, const uint8 n, const U d)
 {
-	x &= (T)(~(((1U << n) - 1) << s));
+	x &= (T)(~((((T)1U << n) - 1) << s));
 	x |= (T)(d << s);
 	return x;
 }
@@ -78,7 +78,7 @@
 template <typename T, typename U>
 static FORCEINLINE T AB(T &x, const uint8 s, const uint8 n, const U i)
 {
-	const T mask = (T)(((1U << n) - 1) << s);
+	const T mask = ((((T)1U << n) - 1) << s);
 	x = (T)((x & ~mask) | ((x + (i << s)) & mask));
 	return x;
 }
@@ -114,7 +114,7 @@
 template <typename T>
 static FORCEINLINE T SetBit(T &x, const uint8 y)
 {
-	return x = (T)(x | (T)(1U << y));
+	return x = (T)(x | ((T)1U << y));
 }
 
 /**
@@ -172,7 +172,7 @@
 template <typename T>
 static FORCEINLINE T ToggleBit(T &x, const uint8 y)
 {
-	return x = (T)(x ^ (T)(1U << y));
+	return x = (T)(x ^ ((T)1U << y));
 }