Merge pull request #74 from miloyip/issue71endianness
Improves endian detection
This commit is contained in:
commit
2d732794f0
@ -52,23 +52,49 @@
|
|||||||
#define RAPIDJSON_BIGENDIAN 1 //!< Big endian machine
|
#define RAPIDJSON_BIGENDIAN 1 //!< Big endian machine
|
||||||
|
|
||||||
//! Endianness of the machine.
|
//! Endianness of the machine.
|
||||||
/*! GCC provided macro for detecting endianness of the target machine. But other
|
/*! GCC 4.6 provided macro for detecting endianness of the target machine. But other
|
||||||
compilers may not have this. User can define RAPIDJSON_ENDIAN to either
|
compilers may not have this. User can define RAPIDJSON_ENDIAN to either
|
||||||
\ref RAPIDJSON_LITTLEENDIAN or \ref RAPIDJSON_BIGENDIAN.
|
\ref RAPIDJSON_LITTLEENDIAN or \ref RAPIDJSON_BIGENDIAN.
|
||||||
|
|
||||||
|
Implemented with reference to
|
||||||
|
https://gcc.gnu.org/onlinedocs/gcc-4.6.0/cpp/Common-Predefined-Macros.html
|
||||||
|
http://www.boost.org/doc/libs/1_42_0/boost/detail/endian.hpp
|
||||||
*/
|
*/
|
||||||
#ifndef RAPIDJSON_ENDIAN
|
#ifndef RAPIDJSON_ENDIAN
|
||||||
|
// Detect with GCC 4.6's macro
|
||||||
# ifdef __BYTE_ORDER__
|
# ifdef __BYTE_ORDER__
|
||||||
# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
||||||
#else
|
# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
#endif // __BYTE_ORDER__
|
|
||||||
# else
|
# else
|
||||||
#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN // Assumes little endian otherwise.
|
# error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN.
|
||||||
|
# endif // __BYTE_ORDER__
|
||||||
|
// Detect with GLIBC's endian.h
|
||||||
|
# elif defined(__GLIBC__)
|
||||||
|
# include <endian.h>
|
||||||
|
# if (__BYTE_ORDER == __LITTLE_ENDIAN)
|
||||||
|
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
||||||
|
# elif (__BYTE_ORDER == __BIG_ENDIAN)
|
||||||
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
|
# else
|
||||||
|
# error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN.
|
||||||
|
# endif // __GLIBC__
|
||||||
|
// Detect with _LITTLE_ENDIAN and _BIG_ENDIAN macro
|
||||||
|
# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
|
||||||
|
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
||||||
|
# elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
|
||||||
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
|
// Detect with architecture macros
|
||||||
|
# elif defined(__sparc) || defined(__sparc__) || defined(_POWER) || defined(__powerpc__) || defined(__ppc__) || defined(__hpux) || defined(__hppa) || defined(_MIPSEB) || defined(_POWER) || defined(__s390__)
|
||||||
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
|
# elif defined(__i386__) || defined(__alpha__) || defined(__ia64) || defined(__ia64__) || defined(_M_IX86) || defined(_M_IA64) || defined(_M_ALPHA) || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__bfin__)
|
||||||
|
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
||||||
|
# else
|
||||||
|
# error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN.
|
||||||
# endif
|
# endif
|
||||||
#endif // RAPIDJSON_ENDIAN
|
#endif // RAPIDJSON_ENDIAN
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// RAPIDJSON_ALIGNSIZE
|
// RAPIDJSON_ALIGNSIZE
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user