From 6770ce908f1c2a21d73be360bf39b03198b6e916 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 27 Mar 2024 21:37:10 +0300 Subject: [PATCH] Refactor trivial serialization --- libs/sir/include/psemek/sir/trivial.hpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/libs/sir/include/psemek/sir/trivial.hpp b/libs/sir/include/psemek/sir/trivial.hpp index 5ba80333..a621ce60 100644 --- a/libs/sir/include/psemek/sir/trivial.hpp +++ b/libs/sir/include/psemek/sir/trivial.hpp @@ -92,21 +92,35 @@ namespace psemek::sir } template - requires (is_ostream_v && !is_custom_v && !is_empty_v && is_trivial_v) - void write(Stream & s, T const & x) + requires (is_ostream_v) + void write_trivial(Stream & s, T const & x) { write_padding(s); s.write(reinterpret_cast(std::addressof(x)), sizeof(x)); } template - requires (is_istream_v && !is_custom_v && !is_empty_v && is_trivial_v) - void read(Stream & s, T & x) + requires (is_ostream_v && !is_custom_v && !is_empty_v && is_trivial_v) + void write(Stream & s, T const & x) + { + write_trivial(s, x); + } + + template + requires (is_istream_v) + void read_trivial(Stream & s, T & x) { read_padding(s); s.read(reinterpret_cast(std::addressof(x)), sizeof(x)); } + template + requires (is_istream_v && !is_custom_v && !is_empty_v && is_trivial_v) + void read(Stream & s, T & x) + { + read_trivial(s, x); + } + template void write_sequence(ostream & s, Iterator begin, Iterator end) {