10#ifndef SEMF_UTILS_PROCESSING_ENDIAN_ENDIAN_H_
11#define SEMF_UTILS_PROCESSING_ENDIAN_ENDIAN_H_
15#include <semf/utils/processing/stdworkarounds/bit>
49 static void fromBigEndian(
const void* data,
size_t size,
void* buffer);
99 static void toBigEndian(
const void* data,
size_t size,
void* buffer);
106 template <
typename T>
114 template <
typename T>
123 template <
typename T>
124 static void toLittleEndian(
const void* data,
size_t size,
void* buffer);
131 template <
typename T>
139 template <
typename T>
149 const T* typedData =
reinterpret_cast<const T*
>(data);
150 T* typedBuffer =
reinterpret_cast<T*
>(buffer);
152 if (std::endian::big == std::endian::native)
154 std::copy(typedData, typedData + size, typedBuffer);
158 std::for_each(typedData, typedData + size,
161 std::reverse_copy(
reinterpret_cast<uint8_t*
>(&value),
reinterpret_cast<uint8_t*
>(&value) +
sizeof(T),
162 reinterpret_cast<uint8_t*
>(typedBuffer));
172 Endian::fromBigEndian<T>(data, 1, &value);
179 return Endian::fromBigEndian<T>(&data);
185 const T* typedData =
reinterpret_cast<const T*
>(data);
186 T* typedBuffer =
reinterpret_cast<T*
>(buffer);
188 if (std::endian::little == std::endian::native)
190 std::copy(typedData, typedData + size, typedBuffer);
194 std::for_each(typedData, typedData + size,
197 std::reverse_copy(
reinterpret_cast<uint8_t*
>(&value),
reinterpret_cast<uint8_t*
>(&value) +
sizeof(T),
198 reinterpret_cast<uint8_t*
>(typedBuffer));
208 Endian::fromLittleEndian<T>(data, 1, &value);
215 return Endian::fromLittleEndian<T>(&data);
221 Endian::fromBigEndian<T>(data, size, buffer);
227 Endian::toBigEndian<T>(&data, 1, buffer);
234 Endian::toBigEndian<T>(data, &value);
241 Endian::fromLittleEndian<T>(data, size, buffer);
247 Endian::toLittleEndian<T>(&data, 1, buffer);
254 Endian::toLittleEndian<T>(data, &value);
Class for representing big-endian numbers.
The Endian class provides a set of functions for handeling the conversion of data with a specific end...
static void fromBigEndian(const void *data, size_t size, void *buffer)
Reads size big-endian numbers from data an stores them in a native representation in buffer.
virtual ~Endian()=default
static void toBigEndian(const void *data, size_t size, void *buffer)
Reads size native stored numbers and converts them into big endian numbers.
static void toLittleEndian(const void *data, size_t size, void *buffer)
Reads size native stored numbers and converts them into little-endian numbers.
static void fromLittleEndian(const void *data, size_t size, void *buffer)
Reads size little-endian numbers from data an stores them in a native representation in buffer.
Class for representing little-endian numbers.