KTL
Loading...
Searching...
No Matches
bits.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4
5namespace ktl::detail
6{
7 constexpr inline uintmax_t log2(uintmax_t n) noexcept
8 {
9 uintmax_t r = 0;
10
11 if (n >> 32) { r += 32U; n >>= 32U; }
12 if (n >> 16) { r += 16U; n >>= 16U; }
13 if (n >> 8) { r += 8U; n >>= 8U; }
14 if (n >> 4) { r += 4U; n >>= 4U; }
15 if (n >> 2) { r += 2U; n >>= 2U; }
16 if (n >> 1) { r += 1U; n >>= 1U; }
17
18 return r;
19 }
20
21 constexpr inline uintmax_t bits_to_represent(uintmax_t n) noexcept
22 {
23 uintmax_t r = 0;
24
25 if (n >> 32) { r += 32U; n >>= 32U; }
26 if (n >> 16) { r += 16U; n >>= 16U; }
27 if (n >> 8) { r += 8U; n >>= 8U; }
28 if (n >> 4) { r += 4U; n >>= 4U; }
29 if (n >> 2) { r += 2U; n >>= 2U; }
30 if (n >> 1) { r += 1U; n >>= 1U; }
31
32 return r + static_cast<uintmax_t>(n);
33 }
34
35 constexpr inline uintmax_t bits_in_range(intmax_t min, intmax_t max) noexcept
36 {
37 return bits_to_represent(static_cast<uintmax_t>(max - min));
38 }
39}
Definition fallback_fwd.h:23
constexpr uintmax_t bits_in_range(intmax_t min, intmax_t max) noexcept
Definition bits.h:35
constexpr uintmax_t log2(uintmax_t n) noexcept
Definition bits.h:7
constexpr uintmax_t bits_to_represent(uintmax_t n) noexcept
Definition bits.h:21
constexpr bool has_no_value_type_v
Definition meta.h:17