Refactor trivial serialization
This commit is contained in:
parent
b26849e689
commit
6770ce908f
1 changed files with 18 additions and 4 deletions
|
|
@ -92,21 +92,35 @@ namespace psemek::sir
|
|||
}
|
||||
|
||||
template <typename Stream, typename T>
|
||||
requires (is_ostream_v<Stream> && !is_custom_v<T> && !is_empty_v<T> && is_trivial_v<T>)
|
||||
void write(Stream & s, T const & x)
|
||||
requires (is_ostream_v<Stream>)
|
||||
void write_trivial(Stream & s, T const & x)
|
||||
{
|
||||
write_padding<T>(s);
|
||||
s.write(reinterpret_cast<char const *>(std::addressof(x)), sizeof(x));
|
||||
}
|
||||
|
||||
template <typename Stream, typename T>
|
||||
requires (is_istream_v<Stream> && !is_custom_v<T> && !is_empty_v<T> && is_trivial_v<T>)
|
||||
void read(Stream & s, T & x)
|
||||
requires (is_ostream_v<Stream> && !is_custom_v<T> && !is_empty_v<T> && is_trivial_v<T>)
|
||||
void write(Stream & s, T const & x)
|
||||
{
|
||||
write_trivial(s, x);
|
||||
}
|
||||
|
||||
template <typename Stream, typename T>
|
||||
requires (is_istream_v<Stream>)
|
||||
void read_trivial(Stream & s, T & x)
|
||||
{
|
||||
read_padding<T>(s);
|
||||
s.read(reinterpret_cast<char *>(std::addressof(x)), sizeof(x));
|
||||
}
|
||||
|
||||
template <typename Stream, typename T>
|
||||
requires (is_istream_v<Stream> && !is_custom_v<T> && !is_empty_v<T> && is_trivial_v<T>)
|
||||
void read(Stream & s, T & x)
|
||||
{
|
||||
read_trivial(s, x);
|
||||
}
|
||||
|
||||
template <typename Iterator>
|
||||
void write_sequence(ostream & s, Iterator begin, Iterator end)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue