39 lines
920 B
C++
39 lines
920 B
C++
#pragma once
|
|
|
|
#include <boost/pfr.hpp>
|
|
#include <iostream>
|
|
#include <sp/common/ByteSwapping.h>
|
|
|
|
namespace sp {
|
|
namespace details {
|
|
|
|
template<typename T>
|
|
void WriteField(std::ostream& a_Os, const T& a_Data) {
|
|
T swapped = a_Data;
|
|
ToNetwork(swapped);
|
|
a_Os.write(reinterpret_cast<const char*>(&swapped), sizeof(a_Data));
|
|
}
|
|
|
|
template<typename T>
|
|
void ReadField(std::istream& a_Is, T& a_Data) {
|
|
a_Is.read(reinterpret_cast<char*>(&a_Data), sizeof(a_Data));
|
|
FromNetwork(a_Data);
|
|
}
|
|
|
|
template <typename TData>
|
|
void WriteMessage(std::ostream& a_Os, const TData& a_MessageData) {
|
|
boost::pfr::for_each_field(a_MessageData, [&a_Os](const auto& a_Field) {
|
|
WriteField(a_Os, a_Field);
|
|
});
|
|
}
|
|
|
|
template <typename TData>
|
|
void ReadMessage(std::istream& a_Is, TData& a_MessageData) {
|
|
boost::pfr::for_each_field(a_MessageData, [&a_Is](auto& a_Field) {
|
|
ReadField(a_Is, a_Field);
|
|
});
|
|
}
|
|
|
|
} // namespace details
|
|
} // namespace sp
|