diff --git a/src/VTKWriter/byteswap_portable.hpp b/src/VTKWriter/byteswap_portable.hpp new file mode 100644 index 0000000000000000000000000000000000000000..70d05c9468b65c73095236929c525c48490293fe --- /dev/null +++ b/src/VTKWriter/byteswap_portable.hpp @@ -0,0 +1,41 @@ +/* + * byteswap_portable.hpp + * + * Created on: Feb 20, 2017 + * Author: i-bird + */ + +#ifndef OPENFPM_IO_SRC_VTKWRITER_BYTESWAP_PORTABLE_HPP_ +#define OPENFPM_IO_SRC_VTKWRITER_BYTESWAP_PORTABLE_HPP_ + +#include <climits> + +/*! \brief This function swap byte from little endian to big endian format + * + * \warning in the case of big-endian machine this function should do nothing. + * Unfortunately this is not the case because I never had the bad luck + * of getting one + * + * \param T value to convert + * + */ +template <typename T> +T swap_endian_lt(T u) +{ + static_assert (CHAR_BIT == 8, "CHAR_BIT != 8"); + + union + { + T u; + unsigned char u8[sizeof(T)]; + } source, dest; + + source.u = u; + + for (size_t k = 0; k < sizeof(T); k++) + dest.u8[k] = source.u8[sizeof(T) - k - 1]; + + return dest.u; +} + +#endif /* OPENFPM_IO_SRC_VTKWRITER_BYTESWAP_PORTABLE_HPP_ */