Codechange: use std::popcount instead of hand written loop

This commit is contained in:
Rubidium
2024-01-18 21:45:42 +01:00
committed by rubidium42
parent ae575a7a5b
commit 1c694e433d
2 changed files with 6 additions and 13 deletions

View File

@@ -248,20 +248,13 @@ inline T KillFirstBit(T value)
* @return the number of bits.
*/
template <typename T>
inline uint CountBits(T value)
constexpr 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);
if constexpr (std::is_enum_v<T>) {
return std::popcount<std::underlying_type_t<T>>(value);
} else {
return std::popcount(value);
}
return num;
}
/**