Loading...
Searching...
No Matches
Go to the documentation of this file.
11#ifndef __TBOX_ENDIAN_H__
12#define __TBOX_ENDIAN_H__
20#define TBOX_ENDIAN_LITTLE 1234
21#define TBOX_ENDIAN_BIG 4321
23#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__)
24#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
25#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_LITTLE
26#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
27#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_BIG
31#if !defined(TBOX_ENDIAN_NATIVE)
33#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_LITTLE
34#elif defined(__linux__) || defined(__GLIBC__)
36#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN)
37#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_LITTLE
38#elif defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)
39#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_BIG
41#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
42#include <machine/endian.h>
43#if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)
44#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_LITTLE
45#elif defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN)
46#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_BIG
51#if !defined(TBOX_ENDIAN_NATIVE)
52#if defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__AARCH64EL__) || defined(__MIPSEL__) || \
53 defined(__MIPSEL) || defined(_MIPSEL) || defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || \
54 defined(_M_X64) || defined(_M_ARM) || defined(_M_ARM64)
55#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_LITTLE
56#elif defined(__BIG_ENDIAN__) || defined(__ARMEB__) || defined(__AARCH64EB__) || defined(__MIPSEB__) || \
57 defined(__MIPSEB) || defined(_MIPSEB) || defined(__powerpc__) || defined(__ppc__) || defined(__sparc__)
58#define TBOX_ENDIAN_NATIVE TBOX_ENDIAN_BIG
62#if !defined(TBOX_ENDIAN_NATIVE)
63#error "Unsupported byte order"
66#define TBOX_IS_LITTLE_ENDIAN (TBOX_ENDIAN_NATIVE == TBOX_ENDIAN_LITTLE)
67#define TBOX_IS_BIG_ENDIAN (TBOX_ENDIAN_NATIVE == TBOX_ENDIAN_BIG)