summaryrefslogtreecommitdiff
path: root/include/util/endian.hpp
blob: 18e49f66cf6848eb3076266dabacf46c8e528622 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once

#include <bit>
#include <concepts>

template <std::integral T>
    requires(sizeof(T) <= 8)
T to_little(T x)
{
	if constexpr (std::endian::native == std::endian::little || sizeof(T) == 1) {
		return x;
	}
	switch (sizeof(T)) {
	case 2:
		return __builtin_bswap16(x);
	case 4:
		return __builtin_bswap32(x);
	case 8:
		return __builtin_bswap64(x);
	}
}