#pragma once
#include <cstdlib>
#include <array>
static constexpr auto ceil_log2(uint32_t x) -> uint32_t {
constexpr auto const t = std::array<uint32_t, 5>{
0xFFFF0000u,
0x0000FF00u,
0x000000F0u,
0x0000000Cu,
0x00000002u};
uint32_t y = (((x & (x - 1)) == 0) ? 0 : 1);
int j = 16;
for (uint32_t const i : t) {
int const k = (((x & i) == 0) ? 0 : j);
y += static_cast<uint32_t>(k);
x >>= k;
j >>= 1;
}
return y;
}