(Math) Added CountBits function

Former-commit-id: 11e825a95a7bda300e46eb321f0fdb51bea93343
This commit is contained in:
Lynix 2015-03-16 15:16:05 +01:00
parent 458fba2180
commit 2bde611d33
2 changed files with 15 additions and 0 deletions

View File

@ -22,6 +22,7 @@
template<typename T> T NzApproach(T value, T objective, T increment); template<typename T> T NzApproach(T value, T objective, T increment);
template<typename T> constexpr T NzClamp(T value, T min, T max); template<typename T> constexpr T NzClamp(T value, T min, T max);
template<typename T> T NzCountBits(T value);
template<typename T> constexpr T NzFromDegrees(T degrees); template<typename T> constexpr T NzFromDegrees(T degrees);
template<typename T> constexpr T NzFromRadians(T radians); template<typename T> constexpr T NzFromRadians(T radians);
template<typename T> constexpr T NzDegreeToRadian(T degrees); template<typename T> constexpr T NzDegreeToRadian(T degrees);

View File

@ -114,6 +114,20 @@ constexpr T NzClamp(T value, T min, T max)
return std::max(std::min(value, max), min); return std::max(std::min(value, max), min);
} }
template<typename T>
T NzCountBits(T value)
{
// https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan
unsigned int count = 0;
while (value)
{
value &= value - 1;
count++;
}
return count;
}
template<typename T> template<typename T>
constexpr T NzDegreeToRadian(T degrees) constexpr T NzDegreeToRadian(T degrees)
{ {