#define Reverse64(val) ((std::uint64_t) ( \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x00000000000000ffU)) << 56) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x000000000000ff00U)) << 40) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x0000000000ff0000U)) << 24) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x00000000ff000000U)) << 8) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x000000ff00000000U)) >> 8) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x0000ff0000000000U)) >> 24) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x00ff000000000000U)) >> 40) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0xff00000000000000U)) >> 56)))
#define Reverse32(val) ((std::uint32_t) ( \
(((std::uint64_t) (val) & \
(std::uint32_t) (0x000000ffU)) << 24) | \
(((std::uint32_t) (val) & \
(std::uint32_t) (0x0000ff00U)) << 8) | \
(((std::uint32_t) (val) & \
(std::uint32_t) (0x00ff0000U)) >> 8) | \
(((std::uint32_t) (val) & \
(std::uint32_t) (0xff000000U)) >> 24)))
#define Reverse16(val) ((std::uint16_t) ( \
(((std::uint16_t) (val) & \
(std::uint16_t) (0x00ffU)) << 8) | \
(((std::uint16_t) (val) & \
(std::uint16_t) (0xff00U)) >> 8)))
(((std::uint64_t) (val) & \
(std::uint64_t) (0x00000000000000ffU)) << 56) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x000000000000ff00U)) << 40) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x0000000000ff0000U)) << 24) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x00000000ff000000U)) << 8) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x000000ff00000000U)) >> 8) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x0000ff0000000000U)) >> 24) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0x00ff000000000000U)) >> 40) | \
(((std::uint64_t) (val) & \
(std::uint64_t) (0xff00000000000000U)) >> 56)))
#define Reverse32(val) ((std::uint32_t) ( \
(((std::uint64_t) (val) & \
(std::uint32_t) (0x000000ffU)) << 24) | \
(((std::uint32_t) (val) & \
(std::uint32_t) (0x0000ff00U)) << 8) | \
(((std::uint32_t) (val) & \
(std::uint32_t) (0x00ff0000U)) >> 8) | \
(((std::uint32_t) (val) & \
(std::uint32_t) (0xff000000U)) >> 24)))
#define Reverse16(val) ((std::uint16_t) ( \
(((std::uint16_t) (val) & \
(std::uint16_t) (0x00ffU)) << 8) | \
(((std::uint16_t) (val) & \
(std::uint16_t) (0xff00U)) >> 8)))