8 struct CountlZeroFunction {
9 template<concepts::Un
signedInteger T>
10 constexpr auto operator()(T value)
const ->
int {
15 if constexpr (
sizeof(T) <=
sizeof(
unsigned int)) {
17 return __builtin_clz(value) - extra_width;
18 }
else if constexpr (
sizeof(T) <=
sizeof(
unsigned long)) {
19 return __builtin_clzl(value);
20 }
else if constexpr (
sizeof(T) <=
sizeof(
unsigned long long)) {
21 return __builtin_clzll(value);
23 static_assert(
sizeof(T) == 16);
24 auto high =
u64(value >> 64);
28 auto low =
u64(value & math::NumericLimits<u64>::max);
29 return (*
this)(low) + 64;
35constexpr inline auto countl_zero = detail::CountlZeroFunction {};
Definition bit_proxy_reference.h:5
constexpr auto countl_zero
Definition countl_zero.h:35
__UINT64_TYPE__ u64
Definition integers.h:12
Definition any_storable.h:9
static constexpr int digits
Definition numeric_limits.h:14