mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-10-29 11:05:43 +00:00
36 lines
765 B
C++
36 lines
765 B
C++
|
#ifndef LLARP_BITS_HPP
|
||
|
#define LLARP_BITS_HPP
|
||
|
|
||
|
namespace llarp
|
||
|
{
|
||
|
namespace bits
|
||
|
{
|
||
|
template < typename Int_t >
|
||
|
constexpr size_t
|
||
|
count_bits(const Int_t& i)
|
||
|
{
|
||
|
return i == 0 ? 0
|
||
|
: ((i & 0x01) == 0x01) ? 1UL + count_bits(i >> 1)
|
||
|
: count_bits(i >> 1);
|
||
|
}
|
||
|
|
||
|
template < typename T >
|
||
|
constexpr size_t
|
||
|
__count_array_bits(const T& array, size_t idx)
|
||
|
{
|
||
|
return idx < sizeof(T)
|
||
|
? count_bits(array[idx]) + __count_array_bits(array, idx + 1)
|
||
|
: 0;
|
||
|
}
|
||
|
|
||
|
template < typename T >
|
||
|
constexpr size_t
|
||
|
count_array_bits(const T& array)
|
||
|
{
|
||
|
return __count_array_bits(array, 0);
|
||
|
}
|
||
|
} // namespace bits
|
||
|
} // namespace llarp
|
||
|
|
||
|
#endif
|