bitwise: convert popcount template into explicit overloads
popcount, popcountl, and popcountll need to be used for each appropriate fundamental type. It's easiest to just provide overloads for popcount for the few cases we have available than to deal with templates.
This commit is contained in:
parent
5627f0f280
commit
9eb2784d84
26
bitwise.hpp
26
bitwise.hpp
@ -67,19 +67,29 @@ namespace cruft {
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
template <
|
constexpr unsigned
|
||||||
typename T,
|
popcount (unsigned t)
|
||||||
typename = std::enable_if_t<
|
|
||||||
std::is_integral_v<T>
|
|
||||||
>
|
|
||||||
>
|
|
||||||
constexpr T
|
|
||||||
popcount (T t)
|
|
||||||
{
|
{
|
||||||
return __builtin_popcount (t);
|
return __builtin_popcount (t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
constexpr unsigned long
|
||||||
|
popcount (unsigned long t)
|
||||||
|
{
|
||||||
|
return __builtin_popcountl (t);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
constexpr unsigned long long
|
||||||
|
popcount (unsigned long long t)
|
||||||
|
{
|
||||||
|
return __builtin_popcountll (t);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
/// returns the integral value composed of the bits from `val' in the
|
/// returns the integral value composed of the bits from `val' in the
|
||||||
/// inclusive range [lo, hi].
|
/// inclusive range [lo, hi].
|
||||||
|
Loading…
Reference in New Issue
Block a user