bitwise: add popcount
This commit is contained in:
parent
a3bdf1b7a1
commit
caa70a2063
12
bitwise.hpp
12
bitwise.hpp
@ -30,6 +30,7 @@ const uint8_t BITMASK_6BITS = 0x3F;
|
||||
const uint8_t BITMASK_7BITS = 0x7F;
|
||||
const uint8_t BITMASK_8BITS = 0xFF;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define MODT(x) ((x) % (sizeof (T) * 8))
|
||||
|
||||
template <typename T>
|
||||
@ -49,6 +50,8 @@ rotater (const T &value, size_t magnitude) {
|
||||
|
||||
#undef MODT
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// TODO: make constexpr for C++14
|
||||
template <typename T>
|
||||
T
|
||||
@ -66,5 +69,14 @@ reverse (T value) {
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
constexpr T
|
||||
popcount (std::enable_if_t<std::is_integral<T>::value,T> t)
|
||||
{
|
||||
return __builtin_popcount (t);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user