8 #ifndef NETWORK_INTERFACE_NETWORK_UTILS_H
9 #define NETWORK_INTERFACE_NETWORK_UTILS_H
19 #include <type_traits>
27 template<
class T,
class C>
29 const uint32_t& offset,
31 const float& valueOffset)
35 for (uint32_t i =
sizeof(T); i > 0; i--)
40 rcvData |= bufArray[(offset - 1) + i];
46 retVal =
reinterpret_cast<T*
>(&rcvData);
47 *retVal *=
static_cast<T
>(factor);
48 *retVal +=
static_cast<T
>(valueOffset);
53 template<
class T,
class C>
55 const uint32_t& offset)
59 return read_le<T>(bufArray, offset, 1.0, 0);
64 typename std::enable_if<std::is_integral<T>::value>::type* = 0)
66 std::vector<uint8_t> ret_val;
74 while (shift < (8 *
sizeof(T)))
76 ret_val.push_back(
static_cast<uint8_t
>((*source & mask) >> shift));
86 typename std::enable_if<std::is_floating_point<T>::value>::type* = 0)
93 if (
sizeof(T) ==
sizeof(uint16_t))
95 return write_le<uint16_t>(
96 static_cast<uint16_t*
>(
97 static_cast<void*
>(source)));
99 else if (
sizeof(T) ==
sizeof(uint32_t))
101 return write_le<uint32_t>(
102 static_cast<uint32_t*
>(
103 static_cast<void*
>(source)));
105 else if (
sizeof(T) ==
sizeof(uint64_t))
107 return write_le<uint64_t>(
108 static_cast<uint64_t*
>(
109 static_cast<void*
>(source)));
114 template<
class T,
class C>
116 const uint32_t& offset,
118 const float& valueOffset)
120 uint64_t rcvData = 0;
122 for (uint32_t i = 0; i <
sizeof(T); i++)
127 rcvData |= bufArray[(offset) + i];
133 retVal =
reinterpret_cast<T*
>(&rcvData);
134 *retVal *=
static_cast<T
>(factor);
135 *retVal +=
static_cast<T
>(valueOffset);
140 template<
class T,
class C>
142 const uint32_t& offset)
146 return read_be<T>(bufArray, offset, 1.0, 0);
151 typename std::enable_if<std::is_integral<T>::value>::type* = 0)
153 std::vector<uint8_t> ret_val;
157 int shift = 8 * (
sizeof(T) - 1);
165 ret_val.push_back(
static_cast<uint8_t
>((*source & mask) >> shift));
175 typename std::enable_if<std::is_floating_point<T>::value>::type* = 0)
182 if (
sizeof(T) ==
sizeof(uint16_t))
185 static_cast<uint16_t*
>(
186 static_cast<void*
>(source)));
188 else if (
sizeof(T) ==
sizeof(uint32_t))
191 static_cast<uint32_t*
>(
192 static_cast<void*
>(source)));
194 else if (
sizeof(T) ==
sizeof(uint64_t))
197 static_cast<uint64_t*
>(
198 static_cast<void*
>(source)));
205 bool packet_found =
false;
208 auto buf_size = in.size();
211 while (!packet_found && buf_size >= 4)
213 chunk = read_be<uint32_t>(in, i);
215 if (chunk == magic_word)
229 template<
class T,
class C>
235 const uint16_t& offset)
239 *out1 = read_le<T>(in, offset);
240 *out2 = read_le<T>(in, offset +
sizeof(T));
244 *out1 = read_be<T>(in, offset);
245 *out2 = read_be<T>(in, offset +
sizeof(T));
252 #endif // NETWORK_INTERFACE_NETWORK_UTILS_H