Core/Algorithm: Add ReverseBits function

Former-commit-id: fa37fcf64cfe6786b9906aa7a8b410e19a3079d1
This commit is contained in:
Lynix
2016-05-17 17:08:14 +02:00
parent 1ebe1a8091
commit 43895d29af
3 changed files with 54 additions and 0 deletions

View File

@@ -28,6 +28,8 @@ namespace Nz
{
return (object .* std::forward<F>(fn))(std::get<S>(std::forward<Tuple>(t))...);
}
NAZARA_CORE_API extern const UInt8 BitReverseTable256[256];
}
/*!
@@ -164,6 +166,23 @@ namespace Nz
seed = static_cast<std::size_t>(b * kMul);
}
/*!
* \ingroup core
* \brief Reverse the bit order of the integer
* \return integer with reversed bits
*
* \param integer Integer whose bits are to be reversed
*/
template<typename T>
T ReverseBits(T integer)
{
T reversed = 0;
for (std::size_t i = 0; i < sizeof(T); ++i)
reversed |= T(Detail::BitReverseTable256[(integer >> i * 8) & 0xFF]) << sizeof(T) * 8 - (i + 1) * 8;
return reversed;
}
template<typename T> struct PointedType<T*> {typedef T type;};
template<typename T> struct PointedType<T* const> {typedef T type;};
template<typename T> struct PointedType<T* volatile> {typedef T type;};