From ebf402f1380b807f9f43ea31a70b6f16ea670afd Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 18 Jun 2013 21:06:41 +0200 Subject: [PATCH] Added GetNearestPowerOfTwo Former-commit-id: 609d470e8478c659b816ad7d34fb9d56ad551b07 --- include/Nazara/Math/Basic.hpp | 1 + include/Nazara/Math/Basic.inl | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/include/Nazara/Math/Basic.hpp b/include/Nazara/Math/Basic.hpp index e2abe5903..212b72703 100644 --- a/include/Nazara/Math/Basic.hpp +++ b/include/Nazara/Math/Basic.hpp @@ -25,6 +25,7 @@ template T NzClamp(T value, T min, T max); template T NzDegrees(T degrees); template T NzDegreeToRadian(T degrees); unsigned int NzIntegralPow(unsigned int base, unsigned int exponent); +unsigned int NzGetNearestPowerOfTwo(unsigned int number); unsigned int NzGetNumberLength(signed char number); unsigned int NzGetNumberLength(unsigned char number); unsigned int NzGetNumberLength(int number); diff --git a/include/Nazara/Math/Basic.inl b/include/Nazara/Math/Basic.inl index 7ff522e88..91595f8d1 100644 --- a/include/Nazara/Math/Basic.inl +++ b/include/Nazara/Math/Basic.inl @@ -59,6 +59,16 @@ inline unsigned int NzIntegralPow(unsigned int base, unsigned int exponent) return r; } +inline unsigned int NzGetNearestPowerOfTwo(unsigned int number) +{ + unsigned int x = 1; + // Tant que x est plus petit que n, on décale ses bits vers la gauche, ce qui revient à multiplier par deux + while(x <= number) + x <<= 1; + + return x; +} + inline unsigned int NzGetNumberLength(signed char number) { // Le standard définit le char comme étant codé sur un octet