summaryrefslogtreecommitdiff
path: root/src/macros.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-06-21 14:32:27 +0000
committerrubidium <rubidium@openttd.org>2007-06-21 14:32:27 +0000
commitf806b46cc967202db3d2fbf3384d0f037c13ed8a (patch)
tree4d9bfa9de886f7ff167c4fa02326f5cd302e8cce /src/macros.h
parent06fded123a346d556ceb2f4585429046ddf8f1b9 (diff)
downloadopenttd-f806b46cc967202db3d2fbf3384d0f037c13ed8a.tar.xz
(svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
Diffstat (limited to 'src/macros.h')
-rw-r--r--src/macros.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/macros.h b/src/macros.h
index c10ef4d49..406ae83da 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -51,6 +51,14 @@ static inline uint clampu(uint a, uint min, uint max)
return a;
}
+/* Gracefully reduce a signed 64-bit int to signed 32-bit -- no bogusly truncating the sign bit */
+static inline int32 ClampToI32(int64 a)
+{
+ if (a <= (int32)0x80000000) return 0x80000000;
+ if (a >= (int32)0x7FFFFFFF) return 0x7FFFFFFF;
+ return (int32)a;
+}
+
static inline int32 BIGMULSS(int32 a, int32 b, int shift)
{
return (int32)((int64)a * (int64)b >> shift);