#pragma once #include #include #include #include namespace kuiper { namespace utils { namespace bits { template requires std::integral inline T set_bit_n(T value, std::uint8_t bit_n) { return value | (static_cast(0b00000001) << (bit_n - 1)); } template requires std::integral inline T unset_bit_n(T value, std::uint8_t bit_n) { return value & ~(static_cast(0b00000001) << (bit_n - 1)); } } // namespace bits namespace bytes { template inline constexpr std::array as_byte_array(T value) { return std::bit_cast, T>(value); } } // namespace bytes } // namespace utils } // namespace kuiper