3#ifndef TETL_BIT_BYTESWAP_HPP
4#define TETL_BIT_BYTESWAP_HPP
16inline constexpr struct byteswap_fallback {
24 return (val << 24) | ((
val << 8) & 0x00FF'0000) | ((val >> 8) & 0x0000'FF00) | (
val >> 24);
31 | ((
val << 40) & 0x00FF'0000'0000'0000)
32 | ((val << 24) & 0x0000'FF00'0000'0000)
33 | ((
val << 8) & 0x0000'00FF'0000'0000)
34 | ((val >> 8) & 0x0000'0000'FF00'0000)
35 | ((
val >> 24) & 0x0000'0000'00FF'0000)
36 | ((val >> 40) & 0x0000'0000'0000'FF00)
43inline constexpr struct byteswap {
46#if __has_builtin(__builtin_bswap16)
47 return __builtin_bswap16(val);
49 return etl::detail::byteswap_fallback(val);
55#if __has_builtin(__builtin_bswap32)
56 return __builtin_bswap32(val);
58 return etl::detail::byteswap_fallback(val);
64#if __has_builtin(__builtin_bswap64)
65 return __builtin_bswap64(val);
67 return etl::detail::byteswap_fallback(val);
84template <
integral Int>
85[[nodiscard]]
constexpr auto byteswap(Int val)
noexcept -> Int
87 if constexpr (
sizeof(Int) == 1) {
89 }
else if constexpr (
sizeof(Int) == 2) {
90 return static_cast<Int
>(detail::byteswap(
static_cast<etl::uint16_t>(val)));
91 }
else if constexpr (
sizeof(Int) == 4) {
92 return static_cast<Int
>(detail::byteswap(
static_cast<etl::uint32_t>(val)));
93 }
else if constexpr (
sizeof(Int) == 8) {
94 return static_cast<Int
>(detail::byteswap(
static_cast<etl::uint64_t>(val)));
constexpr auto byteswap(Int val) noexcept -> Int
Reverses the bytes in the given integer value n.
Definition byteswap.hpp:85
auto val(pin_number pin) -> etl::uint16_t
Definition gpio.hpp:37
Definition adjacent_find.hpp:8
TETL_BUILTIN_UINT16 uint16_t
Unsigned integer type with width of exactly 16 bits.
Definition uint_t.hpp:14
TETL_BUILTIN_UINT64 uint64_t
Unsigned integer type with width of exactly 64 bits.
Definition uint_t.hpp:20
constexpr bool always_false
Definition always_false.hpp:9
TETL_BUILTIN_UINT32 uint32_t
Unsigned integer type with width of exactly 32 bits.
Definition uint_t.hpp:17