39 if constexpr(std::endian::native != std::endian::big) {
40 this->codeId = swapEndian<T>(this->codeId);
41 this->bodySize = swapEndian<uint32_t>(this->bodySize);
57 template<
typename DataType>
83 return this->body.size();
87 template<
typename DataType>
90 static_assert(std::is_standard_layout<DataType>::value,
"Data is too complex to be pulled from vector");
92 if (size > msg.
body.size()) {
96 size_t i = msg.
body.size() - size;
97 std::memmove(&data, msg.
body.data(), size);
98 msg.
body.assign(msg.
body.begin() + size, msg.
body.end());
99 if constexpr(std::endian::native != std::endian::big) {
100 data = swapEndian<DataType>(data);
111 if (size > msg.
body.size()) {
115 size_t i = msg.
body.size() - size;
117 data.assign(
reinterpret_cast<char *
>(msg.
body.data()), size);
118 msg.
body.assign(msg.
body.begin() + size, msg.
body.end());
119 if constexpr(std::endian::native != std::endian::big) {
120 std::reverse(data.begin(), data.end());
138 this->header.bodySize = 0;
145 os <<
"ID:" << int(msg.
header.codeId) <<
" Size:" << msg.
header.bodySize;
149 template<
typename T,
typename DataType>
152 static_assert(std::is_standard_layout<DataType>::value,
"Data is too complex to be pushed into vector");
154 size_t i = msg.
body.size();
156 msg.
body.resize(msg.
body.size() +
sizeof(DataType));
157 if constexpr(std::endian::native != std::endian::big) {
158 data = swapEndian<DataType>(data);
161 std::memmove(msg.
body.data() + i, &data,
sizeof(DataType));
170 size_t i = msg.
body.size();
172 msg.
body.resize(msg.
body.size() + data.size());
173 if constexpr(std::endian::native != std::endian::big) {
174 std::reverse(data.begin(), data.end());
177 std::memmove(msg.
body.data() + i, data.data(), data.size());
185 return msg << std::string(data);
188 template<
typename T,
typename DataType>