summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2010-02-05 17:05:58 +0000
committersmatz <smatz@openttd.org>2010-02-05 17:05:58 +0000
commitd62d0ac48997f9b72da0f554dcf5269694d5999e (patch)
treee849059133de10814a39a544a3060a9d7dcff672 /src/core
parenta80eb0a1c00136ca3c4bbbe94842f386fdd2a334 (diff)
downloadopenttd-d62d0ac48997f9b72da0f554dcf5269694d5999e.tar.xz
(svn r19019) -Codechange: use HasExactlyOneBit() and HasAtMostOneBit() instead of CountBits() where possible
Diffstat (limited to 'src/core')
-rw-r--r--src/core/bitmath_func.hpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/core/bitmath_func.hpp b/src/core/bitmath_func.hpp
index 6ef67ca7f..85eaee6f9 100644
--- a/src/core/bitmath_func.hpp
+++ b/src/core/bitmath_func.hpp
@@ -255,6 +255,30 @@ static inline uint CountBits(T value)
}
/**
+ * Test whether \a value has exactly 1 bit set
+ *
+ * @param value the value to test.
+ * @return does \a value have exactly 1 bit set?
+ */
+template <typename T>
+static FORCEINLINE bool HasExactlyOneBit(T value)
+{
+ return value != 0 && (value & (value - 1)) == 0;
+}
+
+/**
+ * Test whether \a value has at most 1 bit set
+ *
+ * @param value the value to test.
+ * @return does \a value have at most 1 bit set?
+ */
+template <typename T>
+static FORCEINLINE bool HasAtMostOneBit(T value)
+{
+ return (value & (value - 1)) == 0;
+}
+
+/**
* ROtate x Left by n
*
* @note Assumes a byte has 8 bits