Created
May 15, 2019 07:56
-
-
Save itwysgsl/100318b3d573085a56d0e22b94d7e222 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#if defined(__APPLE__) | |
#if !defined(bswap_16) | |
// Mac OS X / Darwin features; we include a check for bswap_16 because if it is already defined, protobuf has | |
// defined these macros for us already; if it isn't, we do it ourselves. In either case, we get the exact same | |
// result regardless which path was taken | |
#include <libkern/OSByteOrder.h> | |
#define bswap_16(x) OSSwapInt16(x) | |
#define bswap_32(x) OSSwapInt32(x) | |
#define bswap_64(x) OSSwapInt64(x) | |
#endif // !defined(bswap_16) | |
#else | |
// Non-Mac OS X / non-Darwin | |
#if HAVE_DECL_BSWAP_16 == 0 | |
inline uint16_t bswap_16(uint16_t x) | |
{ | |
return (x >> 8) | (x << 8); | |
} | |
#endif // HAVE_DECL_BSWAP16 | |
#if HAVE_DECL_BSWAP_32 == 0 | |
inline uint32_t bswap_32(uint32_t x) | |
{ | |
return (((x & 0xff000000U) >> 24) | ((x & 0x00ff0000U) >> 8) | | |
((x & 0x0000ff00U) << 8) | ((x & 0x000000ffU) << 24)); | |
} | |
#endif // HAVE_DECL_BSWAP32 | |
#if HAVE_DECL_BSWAP_64 == 0 | |
inline uint64_t bswap_64(uint64_t x) | |
{ | |
return (((x & 0xff00000000000000ull) >> 56) | |
| ((x & 0x00ff000000000000ull) >> 40) | |
| ((x & 0x0000ff0000000000ull) >> 24) | |
| ((x & 0x000000ff00000000ull) >> 8) | |
| ((x & 0x00000000ff000000ull) << 8) | |
| ((x & 0x0000000000ff0000ull) << 24) | |
| ((x & 0x000000000000ff00ull) << 40) | |
| ((x & 0x00000000000000ffull) << 56)); | |
} | |
#endif // HAVE_DECL_BSWAP64 | |
#endif // defined(__APPLE__) | |
#if HAVE_DECL_HTOBE32 == 0 | |
inline uint32_t htobe32(uint32_t host_32bits) | |
{ | |
return host_32bits; | |
} | |
#endif // HAVE_DECL_HTOBE32 | |
#if HAVE_DECL_LE32TOH == 0 | |
inline uint32_t le32toh(uint32_t little_endian_32bits) | |
{ | |
return bswap_32(little_endian_32bits); | |
} | |
#endif // HAVE_DECL_LE32TOH |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment