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)
51inline 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];
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
Macros common to all headers.