This commit is contained in:
38
include/sp/protocol/MessageIO.h
Normal file
38
include/sp/protocol/MessageIO.h
Normal file
@@ -0,0 +1,38 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user