Mercurial > hg > openttd
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)); }