6 #ifndef JLM_UTIL_MATH_HPP
7 #define JLM_UTIL_MATH_HPP
27 static_assert(std::is_integral_v<T>,
"T must be integral type");
54 return T(1) << (
log2Floor(value - 1) + 1);
74 const auto miss = value % multiple;
79 return value + multiple - miss;
96 using UnsignedT = std::make_unsigned_t<T>;
97 return log2Floor(
static_cast<UnsignedT
>(value)) + 1;
109 static_assert(std::is_enum_v<T>,
"BitWidthOfEnum only takes enums");
111 using UnderlyingT = std::underlying_type_t<T>;
static constexpr T RoundUpToMultipleOf(T value, T multiple)
static constexpr T RoundUpToPowerOf2(T value)
static constexpr int BitsRequiredToRepresent(T value)
static constexpr int BitWidthOfEnum(T endValue)
static constexpr int log2Floor(T value)