17 #include "../declspec.h"
23 #include <type_traits>
41 template<
typename T, std::
size_t N>
45 std::array<T, N> result;
46 memcpy(result.data(), in,
sizeof(result));
65 memcpy(&result, &in,
sizeof(T));
74 template<
typename T, std::
size_t N>
80 for (std::size_t ii=0; ii<N; ++ii)
81 ss << std::to_string(a[ii]) << (ii == N-1 ?
")" :
", ");
88 template<
typename T, std::
size_t N>
93 ss << std::hex << std::setfill(
'0') << std::right;
94 for (std::size_t ii=0; ii<N; ++ii)
95 ss << std::setw(2*
sizeof(T)) << int(a[ii]) << (ii==N-1 ?
"" :
",");
103 template<
typename T, std::
size_t N>
107 return array_to_hex<T, N>(ptr_to_array<T, N>(a));
114 template<
typename T, std::
size_t N>
118 return array_to_hex<T, N>(ptr_to_array<T, N>(a));
134 byteswapAlways(T *ptr,
size_t n = 1)
136 char in[
sizeof(T)], out[
sizeof(T)];
137 for (
size_t offset=0; offset<n; ++offset) {
138 memcpy(&in[0], ptr,
sizeof(T));
139 for (
size_t ii=0; ii<
sizeof(T); ++ii)
140 out[
sizeof(T)-ii-1] = in[ii];
141 memcpy(ptr, &out[0],
sizeof(T));
152 byteswapT(T *ptr,
size_t n = 1)
155 byteswapAlways(ptr, n);
177 extern OPENZGY_TEST_API
void byteswapV1Long(std::int64_t *ptr,
size_t n = 1);
179 extern OPENZGY_TEST_API
void byteswapV1Long(std::uint64_t *ptr,
size_t n = 1);
181 template<
typename T,
typename U,
int N>
183 array_cast(
const std::array<U,N>& in)
185 std::array<T,N> result;
186 for (
int ii=0; ii<N; ++ii)
187 result[ii] =
static_cast<T
>(in[ii]);