25 constexpr
unsigned lg2(uint64_t n) {
return n < 2 ? 0 : 1 +
lg2(n / 2); }
27 constexpr uint64_t
bitmask(std::size_t begin, std::size_t end = 0)
29 return (begin - end < 64) ? ((1ull << (begin - end)) - 1) << end : std::numeric_limits<uint64_t>::max();
32 constexpr uint64_t
splice_bits(uint64_t upper, uint64_t lower, std::size_t bits) {
return (upper & ~
bitmask(bits)) | (lower &
bitmask(bits)); }
constexpr uint64_t splice_bits(uint64_t upper, uint64_t lower, std::size_t bits)
Definition: bits.h:32
constexpr uint64_t bitmask(std::size_t begin, std::size_t end=0)
Definition: bits.h:27
constexpr unsigned lg2(uint64_t n)
Definition: bits.h:25