Tatooine
swap_endianess.h
Go to the documentation of this file.
1#ifndef TATOOINE_SWAP_ENDIANESS_H
2#define TATOOINE_SWAP_ENDIANESS_H
3//==============================================================================
4#include <vector>
5//==============================================================================
6namespace tatooine {
7//==============================================================================
8template <typename Data>
9constexpr Data swap_endianess(Data data) {
10 constexpr auto size = sizeof(Data);
11 using mem_t = unsigned char *;
12 auto mem = reinterpret_cast<mem_t>(&data);
13
14 // swap bytes
15 for (size_t i = 0; i < size / 2; i++) {
16 std::swap(mem[i], mem[size - 1 - i]);
17 }
18 return data;
19}
20//------------------------------------------------------------------------------
21template <typename Data>
22constexpr void swap_endianess(Data *data, size_t n) {
23 constexpr size_t size = sizeof(Data);
24 using mem_t = unsigned char *;
25 for (size_t i = 0; i < n; ++i) {
26 auto mem = reinterpret_cast<mem_t>(&data[i]);
27 // swap bytes
28 for (size_t j = 0; j < size / 2; j++) {
29 std::swap(mem[j], mem[size - 1 - j]);
30 }
31 }
32}
33//------------------------------------------------------------------------------
34template <typename Data>
35void swap_endianess(std::vector<Data> &data) {
36 swap_endianess(data.data(), data.size());
37}
38//==============================================================================
39} // namespace tatooine
40//==============================================================================
41#endif
Definition: algorithm.h:6
constexpr Data swap_endianess(Data data)
Definition: swap_endianess.h:9
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148