mirror of https://github.com/oxen-io/lokinet
Replace llarp/util/endian.hpp with oxenc/endian.h
parent
64d6ba8a53
commit
b09298e211
@ -1,203 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// adapted from libi2pd
|
||||
|
||||
#include <cinttypes>
|
||||
#include <cstring>
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <sys/endian.h>
|
||||
#elif defined(__sun)
|
||||
#include <sys/byteorder.h>
|
||||
#include <endian.h>
|
||||
#define htobe16(x) htons(x)
|
||||
#define htole16(x) (x)
|
||||
#define be16toh(x) ntohs(x)
|
||||
#define le16toh(x) (x)
|
||||
|
||||
#define htobe32(x) htonl(x)
|
||||
#define htole32(x) (x)
|
||||
#define be32toh(x) ntohl(x)
|
||||
#define le32toh(x) (x)
|
||||
|
||||
#define htobe64(x) \
|
||||
(((uint64_t)htonl(((uint32_t)(((uint64_t)(x)) >> 32)))) \
|
||||
| (((uint64_t)htonl(((uint32_t)(x)))) << 32))
|
||||
#define htole64(x) (x)
|
||||
#define be64toh(x) \
|
||||
(((uint64_t)ntohl(((uint32_t)(((uint64_t)(x)) >> 32)))) \
|
||||
| (((uint64_t)ntohl(((uint32_t)(x)))) << 32))
|
||||
#define le64toh(x) (x)
|
||||
#elif defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__GLIBC__)
|
||||
#include <endian.h>
|
||||
#elif defined(__APPLE__) && defined(__MACH__)
|
||||
#include <libkern/OSByteOrder.h>
|
||||
#define htobe16(x) OSSwapHostToBigInt16(x)
|
||||
#define htole16(x) OSSwapHostToLittleInt16(x)
|
||||
#define be16toh(x) OSSwapBigToHostInt16(x)
|
||||
#define le16toh(x) OSSwapLittleToHostInt16(x)
|
||||
|
||||
#define htobe32(x) OSSwapHostToBigInt32(x)
|
||||
#define htole32(x) OSSwapHostToLittleInt32(x)
|
||||
#define be32toh(x) OSSwapBigToHostInt32(x)
|
||||
#define le32toh(x) OSSwapLittleToHostInt32(x)
|
||||
|
||||
#define htobe64(x) OSSwapHostToBigInt64(x)
|
||||
#define htole64(x) OSSwapHostToLittleInt64(x)
|
||||
#define be64toh(x) OSSwapBigToHostInt64(x)
|
||||
#define le64toh(x) OSSwapLittleToHostInt64(x)
|
||||
#elif defined(_WIN32)
|
||||
#include <winsock2.h>
|
||||
#ifndef __LITTLE_ENDIAN__
|
||||
#define __LITTLE_ENDIAN__
|
||||
#endif
|
||||
#define htobe16(x) htons(x)
|
||||
#define htole16(x) (x)
|
||||
#define be16toh(x) ntohs(x)
|
||||
#define le16toh(x) (x)
|
||||
|
||||
#define htobe32(x) htonl(x)
|
||||
#define htole32(x) (x)
|
||||
#define be32toh(x) ntohl(x)
|
||||
#define le32toh(x) (x)
|
||||
|
||||
#define htobe64(x) \
|
||||
(((uint64_t)htonl(((uint32_t)(((uint64_t)(x)) >> 32)))) \
|
||||
| (((uint64_t)htonl(((uint32_t)(x)))) << 32))
|
||||
#define htole64(x) (x)
|
||||
#define be64toh(x) \
|
||||
(((uint64_t)ntohl(((uint32_t)(((uint64_t)(x)) >> 32)))) \
|
||||
| (((uint64_t)ntohl(((uint32_t)(x)))) << 32))
|
||||
#define le64toh(x) (x)
|
||||
#else
|
||||
#define NEEDS_LOCAL_ENDIAN
|
||||
#include <cstdint>
|
||||
uint16_t
|
||||
htobe16(uint16_t int16);
|
||||
uint32_t
|
||||
htobe32(uint32_t int32);
|
||||
uint64_t
|
||||
htobe64(uint64_t int64);
|
||||
|
||||
uint16_t
|
||||
be16toh(uint16_t big16);
|
||||
uint32_t
|
||||
be32toh(uint32_t big32);
|
||||
uint64_t
|
||||
be64toh(uint64_t big64);
|
||||
|
||||
// assume LittleEndine
|
||||
#define htole16
|
||||
#define htole32
|
||||
#define htole64
|
||||
#define le16toh
|
||||
#define le32toh
|
||||
#define le64toh
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(__LITTLE_ENDIAN__) && defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) \
|
||||
&& __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define __LITTLE_ENDIAN__
|
||||
#elif !defined(__BIG_ENDIAN__) && defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) \
|
||||
&& __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define __BIG_ENDIAN__
|
||||
#elif !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
|
||||
#error "Error: don't know which endian this is"
|
||||
#endif
|
||||
|
||||
inline uint16_t
|
||||
buf16toh(const void* buf)
|
||||
{
|
||||
uint16_t b16;
|
||||
memcpy(&b16, buf, sizeof(uint16_t));
|
||||
return b16;
|
||||
}
|
||||
|
||||
inline uint32_t
|
||||
buf32toh(const void* buf)
|
||||
{
|
||||
uint32_t b32;
|
||||
memcpy(&b32, buf, sizeof(uint32_t));
|
||||
return b32;
|
||||
}
|
||||
|
||||
inline uint64_t
|
||||
buf64toh(const void* buf)
|
||||
{
|
||||
uint64_t b64;
|
||||
memcpy(&b64, buf, sizeof(uint64_t));
|
||||
return b64;
|
||||
}
|
||||
|
||||
inline uint16_t
|
||||
bufbe16toh(const void* buf)
|
||||
{
|
||||
return be16toh(buf16toh(buf));
|
||||
}
|
||||
|
||||
inline uint32_t
|
||||
bufbe32toh(const void* buf)
|
||||
{
|
||||
return be32toh(buf32toh(buf));
|
||||
}
|
||||
|
||||
inline uint64_t
|
||||
bufbe64toh(const void* buf)
|
||||
{
|
||||
return be64toh(buf64toh(buf));
|
||||
}
|
||||
|
||||
inline void
|
||||
htobuf16(void* buf, uint16_t b16)
|
||||
{
|
||||
memcpy(buf, &b16, sizeof(uint16_t));
|
||||
}
|
||||
|
||||
inline void
|
||||
htobuf32(void* buf, uint32_t b32)
|
||||
{
|
||||
memcpy(buf, &b32, sizeof(uint32_t));
|
||||
}
|
||||
|
||||
inline void
|
||||
htobuf64(void* buf, uint64_t b64)
|
||||
{
|
||||
memcpy(buf, &b64, sizeof(uint64_t));
|
||||
}
|
||||
|
||||
inline void
|
||||
htobe16buf(void* buf, uint16_t big16)
|
||||
{
|
||||
htobuf16(buf, htobe16(big16));
|
||||
}
|
||||
|
||||
inline void
|
||||
htobe32buf(void* buf, uint32_t big32)
|
||||
{
|
||||
htobuf32(buf, htobe32(big32));
|
||||
}
|
||||
|
||||
inline void
|
||||
htobe64buf(void* buf, uint64_t big64)
|
||||
{
|
||||
htobuf64(buf, htobe64(big64));
|
||||
}
|
||||
|
||||
inline void
|
||||
htole16buf(void* buf, uint16_t big16)
|
||||
{
|
||||
htobuf16(buf, htole16(big16));
|
||||
}
|
||||
|
||||
inline void
|
||||
htole32buf(void* buf, uint32_t big32)
|
||||
{
|
||||
htobuf32(buf, htole32(big32));
|
||||
}
|
||||
|
||||
inline void
|
||||
htole64buf(void* buf, uint64_t big64)
|
||||
{
|
||||
htobuf64(buf, htole64(big64));
|
||||
}
|
Loading…
Reference in New Issue