diff --git a/libs/sir/include/psemek/sir/array.hpp b/libs/sir/include/psemek/sir/array.hpp new file mode 100644 index 00000000..42c7a797 --- /dev/null +++ b/libs/sir/include/psemek/sir/array.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +namespace psemek::sir +{ + + template + requires (is_ostream_v && !is_custom_v>) + void write(Stream & s, util::array const & x) + { + write(s, x.dims()); + if constexpr (is_trivial_v) + { + write_contiguous(s, x.data(), x.size()); + } + else + { + write_sequence(s, x.begin(), x.end()); + } + } + + template + requires (is_istream_v && !is_custom_v>) + void read(Stream & s, util::array & x) + { + std::array dims; + read(s, dims); + x.resize(dims); + if constexpr (is_trivial_v) + { + read_contiguous(s, x.data(), x.size()); + } + else + { + read_sequence(s, x.begin(), x.end()); + } + } + +}