#pragma once #include #include #include namespace sp { namespace details { template void WriteField(std::ostream& a_Os, const T& a_Data) { T swapped = a_Data; ToNetwork(swapped); a_Os.write(reinterpret_cast(&swapped), sizeof(a_Data)); } template void ReadField(std::istream& a_Is, T& a_Data) { a_Is.read(reinterpret_cast(&a_Data), sizeof(a_Data)); FromNetwork(a_Data); } template 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 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