mirror of
https://github.com/thepigeongenerator/mcaselector-lite.git
synced 2025-12-18 20:35:45 +01:00
move endian.h to lib.h, to replace the system library.
Unix, and likely other systems ship with `endian.h`, from GNUC. This causes compatibility issues, so renamed the functions to be similar to the target header's macros. Where the system header is replaced to eliminate confusion.
This commit is contained in:
@@ -2,53 +2,36 @@
|
|||||||
// Licensed under the MIT Licence. See LICENSE for details
|
// Licensed under the MIT Licence. See LICENSE for details
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#if __has_include_next("endian.h")
|
||||||
|
#include_next <endian.h>
|
||||||
#include "../atrb.h"
|
#else
|
||||||
#include "../types.h"
|
|
||||||
|
|
||||||
/* little endian */
|
|
||||||
atrb_const static inline u16 le16ton(u16); // converts little-endian (LE) encoding to native for a 16 bit integer. (NOOP if native is LE)
|
|
||||||
atrb_const static inline u32 le32ton(u32); // converts little-endian (LE) encoding to native for a 32 bit integer. (NOOP if native is LE)
|
|
||||||
atrb_const static inline u64 le64ton(u64); // converts little-endian (LE) encoding to native for a 64 bit integer. (NOOP if native is LE)
|
|
||||||
atrb_const static inline u16 ntole16(u16); // converts native encoding to little-endian (LE) for a 16 bit integer. (NOOP if native is LE)
|
|
||||||
atrb_const static inline u32 ntole32(u32); // converts native encoding to little-endian (LE) for a 32 bit integer. (NOOP if native is LE)
|
|
||||||
atrb_const static inline u64 ntole64(u64); // converts native encoding to little-endian (LE) for a 64 bit integer. (NOOP if native is LE)
|
|
||||||
|
|
||||||
/* big endian */
|
|
||||||
atrb_const static inline u16 be16ton(u16); // converts big-endian (BE) encoding to native for a 16 bit integer. (NOOP if native is BE)
|
|
||||||
atrb_const static inline u32 be32ton(u32); // converts big-endian (BE) encoding to native for a 32 bit integer. (NOOP if native is BE)
|
|
||||||
atrb_const static inline u64 be64ton(u64); // converts big-endian (BE) encoding to native for a 64 bit integer. (NOOP if native is BE)
|
|
||||||
atrb_const static inline u16 ntobe16(u16); // converts native encoding to big-endian (BE) for a 16 bit integer. (NOOP if native is BE)
|
|
||||||
atrb_const static inline u32 ntobe32(u32); // converts native encoding to big-endian (BE) for a 32 bit integer. (NOOP if native is BE)
|
|
||||||
atrb_const static inline u64 ntobe64(u64); // converts native encoding to big-endian (BE) for a 64 bit integer. (NOOP if native is BE)
|
|
||||||
|
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
u16 le16ton(u16 x) { return x; }
|
#define le16toh(x) __uint16_identity(x)
|
||||||
u32 le32ton(u32 x) { return x; }
|
#define le32toh(x) __uint32_identity(x)
|
||||||
u64 le64ton(u64 x) { return x; }
|
#define le64toh(x) __uint64_identity(x)
|
||||||
u16 ntole16(u16 x) { return x; }
|
#define htole16(x) __uint16_identity(x)
|
||||||
u32 ntole32(u32 x) { return x; }
|
#define htole32(x) __uint32_identity(x)
|
||||||
u64 ntole64(u64 x) { return x; }
|
#define htole64(x) __uint64_identity(x)
|
||||||
u16 be16ton(u16 x) { return __builtin_bswap16(x); }
|
#define be16toh(x) __builtin_bswap16(x)
|
||||||
u32 be32ton(u32 x) { return __builtin_bswap32(x); }
|
#define be32toh(x) __builtin_bswap32(x)
|
||||||
u64 be64ton(u64 x) { return __builtin_bswap64(x); }
|
#define be64toh(x) __builtin_bswap64(x)
|
||||||
u16 ntobe16(u16 x) { return __builtin_bswap16(x); }
|
#define htobe16(x) __builtin_bswap16(x)
|
||||||
u32 ntobe32(u32 x) { return __builtin_bswap32(x); }
|
#define htobe32(x) __builtin_bswap32(x)
|
||||||
u64 ntobe64(u64 x) { return __builtin_bswap64(x); }
|
#define htobe64(x) __builtin_bswap64(x)
|
||||||
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||||
u16 le16ton(u16 x) { __builtin_bswap16(x); }
|
#defined le16toh(x) __builtin_bswap16(x)
|
||||||
u32 le32ton(u32 x) { __builtin_bswap32(x); }
|
#defined le32toh(x) __builtin_bswap32(x)
|
||||||
u64 le64ton(u64 x) { __builtin_bswap64(x); }
|
#defined le64toh(x) __builtin_bswap64(x)
|
||||||
u16 ntole16(u16 x) { __builtin_bswap16(x); }
|
#defined htole16(x) __builtin_bswap16(x)
|
||||||
u32 ntole32(u32 x) { __builtin_bswap32(x); }
|
#defined htole32(x) __builtin_bswap32(x)
|
||||||
u64 ntole64(u64 x) { __builtin_bswap64(x); }
|
#defined htole64(x) __builtin_bswap64(x)
|
||||||
u16 be16ton(u16 x) { return x; }
|
#defined be16toh(x) __uint16_identity(x)
|
||||||
u32 be32ton(u32 x) { return x; }
|
#defined be32toh(x) __uint32_identity(x)
|
||||||
u64 be64ton(u64 x) { return x; }
|
#defined be64toh(x) __uint64_identity(x)
|
||||||
u16 ntobe16(u16 x) { return x; }
|
#defined htobe16(x) __uint16_identity(x)
|
||||||
u32 ntobe32(u32 x) { return x; }
|
#defined htobe32(x) __uint32_identity(x)
|
||||||
u64 ntobe64(u64 x) { return x; }
|
#defined htobe64(x) __uint64_identity(x)
|
||||||
#else
|
#else
|
||||||
#error machine architecture unsupported! Expected either big-endian or little-endian, make sure to use a compiler which defines __BYTE_ORDER__ (like clang or gcc)
|
#error machine architecture unsupported! Expected either big-endian or little-endian, make sure to use a compiler which defines __BYTE_ORDER__ (like clang or gcc)
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user