|
15 | 15 | // relicensed from MIT License with permission |
16 | 16 |
|
17 | 17 | #include <xtl/xsequence.hpp> |
| 18 | +#include <xtl/xplatform.hpp> |
18 | 19 |
|
19 | 20 | #include <algorithm> |
20 | 21 | #include <complex> |
@@ -43,24 +44,9 @@ namespace xt |
43 | 44 | namespace detail |
44 | 45 | { |
45 | 46 |
|
46 | | - /* Test for endianess. Compiler can optimize that to a single constant. */ |
47 | | - static inline bool is_big_endian() |
48 | | - { |
49 | | - uint32_t utmp = 0x01020304; |
50 | | - char btmp[sizeof(utmp)]; |
51 | | - std::memcpy(&btmp[0], &utmp, sizeof(utmp)); |
52 | | - const bool big_endian = btmp[0] == 0x01; |
53 | | - return big_endian; |
54 | | - } |
55 | | - |
56 | 47 | const char magic_string[] = "\x93NUMPY"; |
57 | | - const std::size_t magic_string_length = 6; |
| 48 | + const std::size_t magic_string_length = sizeof(magic_string) - 1; |
58 | 49 |
|
59 | | - const char little_endian_char = '<'; |
60 | | - const char big_endian_char = '>'; |
61 | | - const char no_endian_char = '|'; |
62 | | - |
63 | | - const char host_endian_char = (is_big_endian() ? big_endian_char : little_endian_char); |
64 | 50 |
|
65 | 51 | template <class O> |
66 | 52 | inline void write_magic(O& ostream, |
@@ -126,9 +112,26 @@ namespace xt |
126 | 112 | } |
127 | 113 |
|
128 | 114 | template <class T> |
129 | | - constexpr char get_endianess() |
| 115 | + inline char get_endianess() |
130 | 116 | { |
131 | | - return sizeof(T) <= sizeof(char) ? no_endian_char : host_endian_char; |
| 117 | + constexpr char little_endian_char = '<'; |
| 118 | + constexpr char big_endian_char = '>'; |
| 119 | + constexpr char no_endian_char = '|'; |
| 120 | + |
| 121 | + if(sizeof(T) <= sizeof(char)) |
| 122 | + { |
| 123 | + return no_endian_char; |
| 124 | + } |
| 125 | + |
| 126 | + switch(xtl::endianness()) |
| 127 | + { |
| 128 | + case xtl::endian::little_endian: |
| 129 | + return little_endian_char; |
| 130 | + case xtl::endian::big_endian: |
| 131 | + return big_endian_char; |
| 132 | + default: |
| 133 | + return no_endian_char; |
| 134 | + } |
132 | 135 | } |
133 | 136 |
|
134 | 137 | template <class T> |
|
0 commit comments