(svn r11031) -Codechange: reduce the amount of duplication of bit counting functions. Based on patches by skidd13, SmatZ and Belugas.

This commit is contained in:
rubidium
2007-09-01 08:31:36 +00:00
parent 0df355bbda
commit 56ab253307
7 changed files with 30 additions and 46 deletions

View File

@@ -420,6 +420,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
*