32 #ifndef DRIVER_SVH_BYTE_ORDER_CONVERISON_H_INCLUDED 33 #define DRIVER_SVH_BYTE_ORDER_CONVERISON_H_INCLUDED 47 size_t toLittleEndian(
const T& data, std::vector<uint8_t>& array,
size_t& write_pos)
50 if (write_pos +
sizeof(T) > array.size())
56 array.resize(write_pos +
sizeof(T));
60 for (
size_t i = 0; i <
sizeof(T); ++i)
64 array[write_pos + i] =
static_cast<uint8_t
>((data >> (i * 8)) & 0xFF);
67 return write_pos +
sizeof(T);
73 std::vector<uint8_t>& array,
79 std::vector<uint8_t>& array,
96 if (read_pos +
sizeof(T) > array.size())
104 for (
size_t i = 0; i <
sizeof(T); ++i)
107 data |= (array[read_pos + i] & 0xFF) << (i * 8);
116 return read_pos +
sizeof(T);
122 std::vector<uint8_t>& array,
128 std::vector<uint8_t>& array,
152 , array(array_size, 0)
169 void reset(
size_t array_size = 1);
172 template <
typename T>
176 if (write_pos +
sizeof(T) > array.size())
178 array.resize(write_pos +
sizeof(T));
182 *(
reinterpret_cast<T*
>(&array[
write_pos])) = data;
183 write_pos +=
sizeof(T);
187 template <
typename T>
191 for (
typename std::vector<T>::const_iterator it = data.begin(); it != data.end(); ++it)
198 template <
typename T>
203 template <
typename T>
208 template <
typename T>
212 template <
typename T>
217 template <
typename T>
223 template <
typename T>
239 template <
typename T>
243 for (
typename std::vector<T>::const_iterator it = data.begin(); it != data.end(); ++it)
256 template <
typename T>
265 template <
typename T>
271 for (
typename std::vector<T>::iterator it = data.begin(); it != data.end(); ++it)
280 template <
typename T>
284 size_t read_back_pos =
write_pos -
sizeof(T);
285 fromLittleEndian<T>(data,
array, read_back_pos);
DRIVER_SVH_IMPORT_EXPORT size_t fromLittleEndian< double >(double &data, std::vector< uint8_t > &array, size_t &read_pos)
Template specialization for float as these have to be handled seperately.
DRIVER_SVH_IMPORT_EXPORT size_t toLittleEndian< float >(const float &data, std::vector< uint8_t > &array, size_t &write_pos)
Template specialization for float as these have to be handled seperately.
#define DRIVER_SVH_IMPORT_EXPORT
ArrayBuilder(size_t array_size=1)
size_t write_pos
current write position in array
std::vector< uint8_t > array
array of template type TArray
DRIVER_SVH_IMPORT_EXPORT size_t toLittleEndian< double >(const double &data, std::vector< uint8_t > &array, size_t &write_pos)
Template specialization for float as these have to be handled seperately.
DRIVER_SVH_IMPORT_EXPORT size_t fromLittleEndian< float >(float &data, std::vector< uint8_t > &array, size_t &read_pos)
Template specialization for float as these have to be handled seperately.
size_t fromLittleEndian(T &data, std::vector< uint8_t > &array, size_t &read_pos)
void appendWithoutConversion(const T &data)
add data without any byte conversion
size_t read_pos
current read position in array
ArrayBuilder & operator>>(T &data)
Read a generic data type from the array builder, Endianess is converted to system architecture...
void reset(size_t array_size=1)
Resets the Arraybuilder to initial state, all values will be deleted.
ArrayBuilder & operator<<(const T &data)
Write any type into ArrayBuilder, convert to LittleEndian in process.
size_t toLittleEndian(const T &data, std::vector< uint8_t > &array, size_t &write_pos)
template function for adding data to an array while converting everything into correct endianess ...
void appendWithoutConversion(const std::vector< T > &data)
add data in vectors without any byte conversion