summaryrefslogtreecommitdiff
path: root/src/macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/macros.h')
-rw-r--r--src/macros.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/macros.h b/src/macros.h
index e7944661a..4ff23c1df 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -421,6 +421,28 @@ static inline int KillFirstBit2x64(int value)
}
/**
+ * Counts the number of set bits in a variable.
+ *
+ * @param value the value to count the number of bits in.
+ * @return the number of bits.
+ */
+template<typename T> static inline uint COUNTBITS(T value)
+{
+ uint num;
+
+ /* This loop is only called once for every bit set by clearing the lowest
+ * bit in each loop. The number of bits is therefore equal to the number of
+ * times the loop was called. It was found at the following website:
+ * http://graphics.stanford.edu/~seander/bithacks.html */
+
+ for (num = 0; value != 0; num++) {
+ value &= (T)(value - 1);
+ }
+
+ return num;
+}
+
+/**
* Returns true if value a has only one bit set to 1
*
* This macro returns true if only one bit is set.