11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
22PROMEKI_NAMESPACE_BEGIN
42 static String hostname();
48 static constexpr bool isLittleEndian() {
return std::endian::native == std::endian::little; }
54 static constexpr bool isBigEndian() {
return std::endian::native == std::endian::big; }
61 template <
typename T>
static void swapEndian(T &value) {
62 static_assert(std::is_arithmetic<T>::value,
"swab() requires an arithmetic type");
63 constexpr size_t size =
sizeof(T);
64 if constexpr (size == 1)
return;
65 unsigned char *data =
reinterpret_cast<unsigned char *
>(&value);
67 for (
size_t i = 0; i < size / 2; ++i) {
68 std::swap(data[i], data[size - i - 1]);
79 template <
typename T,
bool ValueIsBigEndian>
static void makeNativeEndian(T &value) {
80 if constexpr (ValueIsBigEndian && isBigEndian())
return;
91 static String demangleSymbol(
const char *symbol,
bool useCache =
true);