55 lines
1.0 KiB
C++
55 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
namespace sp {
|
|
|
|
bool IsSystemBigEndian();
|
|
|
|
/**
|
|
* \brief Serialize value to (network byte order) big endian
|
|
*/
|
|
template <typename T>
|
|
void ToNetwork(T& value) {}
|
|
|
|
template <>
|
|
void ToNetwork<std::uint16_t>(std::uint16_t& value);
|
|
|
|
template <>
|
|
void ToNetwork<std::uint32_t>(std::uint32_t& value);
|
|
|
|
template <>
|
|
void ToNetwork<std::uint64_t>(std::uint64_t& value);
|
|
|
|
/**
|
|
* \brief Deserialize value from (network byte order) big endian
|
|
*/
|
|
template <typename T>
|
|
void FromNetwork(T& value) {}
|
|
|
|
template <>
|
|
void FromNetwork<std::uint16_t>(std::uint16_t& value);
|
|
|
|
template <>
|
|
void FromNetwork<std::uint32_t>(std::uint32_t& value);
|
|
|
|
template <>
|
|
void FromNetwork<std::uint64_t>(std::uint64_t& value);
|
|
|
|
/**
|
|
* \brief Swap bytes if the value is any kind of integer
|
|
*/
|
|
template <typename T>
|
|
void TrySwapBytes(T& value) {}
|
|
|
|
template <>
|
|
void TrySwapBytes<std::uint16_t>(std::uint16_t& value);
|
|
|
|
template <>
|
|
void TrySwapBytes<std::uint32_t>(std::uint32_t& value);
|
|
|
|
template <>
|
|
void TrySwapBytes<std::uint64_t>(std::uint64_t& value);
|
|
|
|
} // namespace sp
|