Add util::array serialization
This commit is contained in:
parent
dbcffa8d4a
commit
49fe46bce2
1 changed files with 42 additions and 0 deletions
42
libs/sir/include/psemek/sir/array.hpp
Normal file
42
libs/sir/include/psemek/sir/array.hpp
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#pragma once
|
||||
|
||||
#include <psemek/sir/trivial.hpp>
|
||||
#include <psemek/sir/container.hpp>
|
||||
#include <psemek/util/array.hpp>
|
||||
|
||||
namespace psemek::sir
|
||||
{
|
||||
|
||||
template <typename Stream, typename T, std::size_t N>
|
||||
requires (is_ostream_v<Stream> && !is_custom_v<util::array<T, N>>)
|
||||
void write(Stream & s, util::array<T, N> const & x)
|
||||
{
|
||||
write(s, x.dims());
|
||||
if constexpr (is_trivial_v<T>)
|
||||
{
|
||||
write_contiguous(s, x.data(), x.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
write_sequence(s, x.begin(), x.end());
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Stream, typename T, std::size_t N>
|
||||
requires (is_istream_v<Stream> && !is_custom_v<util::array<T, N>>)
|
||||
void read(Stream & s, util::array<T, N> & x)
|
||||
{
|
||||
std::array<std::size_t, N> dims;
|
||||
read(s, dims);
|
||||
x.resize(dims);
|
||||
if constexpr (is_trivial_v<T>)
|
||||
{
|
||||
read_contiguous(s, x.data(), x.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
read_sequence(s, x.begin(), x.end());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue