11 #ifdef DMLC_CMAKE_LITTLE_ENDIAN 13 #define DMLC_LITTLE_ENDIAN DMLC_CMAKE_LITTLE_ENDIAN 15 #if defined(__APPLE__) || defined(_WIN32) 16 #define DMLC_LITTLE_ENDIAN 1 17 #elif defined(__GLIBC__) || defined(__GNU_LIBRARY__) \ 18 || defined(__ANDROID__) || defined(__RISCV__) 20 #define DMLC_LITTLE_ENDIAN (__BYTE_ORDER == __LITTLE_ENDIAN) 21 #elif defined(__FreeBSD__) || defined(__OpenBSD__) 22 #include <sys/endian.h> 23 #define DMLC_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN) 24 #elif defined(__EMSCRIPTEN__) || defined(__hexagon__) 25 #define DMLC_LITTLE_ENDIAN 1 26 #elif defined(__sun) || defined(sun) 27 #include <sys/isa_defs.h> 28 #if defined(_LITTLE_ENDIAN) 29 #define DMLC_LITTLE_ENDIAN 1 31 #define DMLC_LITTLE_ENDIAN 0 34 #error "Unable to determine endianness of your machine; use CMake to compile" 39 #define DMLC_IO_NO_ENDIAN_SWAP (DMLC_LITTLE_ENDIAN == DMLC_IO_USE_LITTLE_ENDIAN) 51 inline void ByteSwap(
void* data,
size_t elem_bytes,
size_t num_elems) {
52 for (
size_t i = 0; i < num_elems; ++i) {
53 uint8_t* bptr =
reinterpret_cast<uint8_t*
>(data) + elem_bytes * i;
54 for (
size_t j = 0; j < elem_bytes / 2; ++j) {
55 uint8_t v = bptr[elem_bytes - 1 - j];
56 bptr[elem_bytes - 1 - j] = bptr[j];
63 #endif // DMLC_ENDIAN_H_ Endian testing, need c++11.
namespace for dmlc
Definition: array_view.h:12
void ByteSwap(void *data, size_t elem_bytes, size_t num_elems)
A generic inplace byte swapping function.
Definition: endian.h:51