mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-01-11 14:43:34 +00:00
49 lines
1.0 KiB
C++
49 lines
1.0 KiB
C++
#ifndef __MLX_BITS__
|
|
#define __MLX_BITS__
|
|
|
|
namespace mlx
|
|
{
|
|
template<std::integral T>
|
|
constexpr T ByteSwap(T value) noexcept
|
|
{
|
|
static_assert(std::has_unique_object_representations_v<T>, "T may not have padding bits");
|
|
auto value_representation = std::bit_cast<std::array<std::byte, sizeof(T)>>(value);
|
|
std::ranges::reverse(value_representation);
|
|
return std::bit_cast<T>(value_representation);
|
|
}
|
|
|
|
constexpr std::uint32_t Rmask() noexcept
|
|
{
|
|
if constexpr(std::endian::native == std::endian::big)
|
|
return 0xFF000000;
|
|
else
|
|
return 0x000000FF;
|
|
}
|
|
|
|
constexpr std::uint32_t Gmask() noexcept
|
|
{
|
|
if constexpr(std::endian::native == std::endian::big)
|
|
return 0x00FF0000;
|
|
else
|
|
return 0x0000FF00;
|
|
}
|
|
|
|
constexpr std::uint32_t Bmask() noexcept
|
|
{
|
|
if constexpr(std::endian::native == std::endian::big)
|
|
return 0x0000FF00;
|
|
else
|
|
return 0x00FF0000;
|
|
}
|
|
|
|
constexpr std::uint32_t Amask() noexcept
|
|
{
|
|
if constexpr(std::endian::native == std::endian::big)
|
|
return 0x000000FF;
|
|
else
|
|
return 0xFF000000;
|
|
}
|
|
}
|
|
|
|
#endif
|