diff --git a/dune/matrix-vector/genericvectortools.hh b/dune/matrix-vector/genericvectortools.hh index 493c6c605b8431501b757431db8db40074a363f5..4b753e5b22773bb9153d8e2c5a5373635e736d54 100644 --- a/dune/matrix-vector/genericvectortools.hh +++ b/dune/matrix-vector/genericvectortools.hh @@ -26,6 +26,12 @@ void writeBinary(std::ostream& s, const Vector& v) { Helper<Vector>::writeBinary(s, v); } +//! Read vector from given stream +template <class Vector> +void readBinary(std::istream& s, Vector& v) { + Helper<Vector>::readBinary(s, v); +} + //! Truncate vector by given bit set template <class Vector, class BitVector> void truncate(Vector& v, const BitVector& tr) { @@ -38,6 +44,10 @@ struct Helper { Hybrid::forEach(v, [&s](auto&& vi) { Generic::writeBinary(s, vi); }); } + static void readBinary(std::istream& s, Vector& v) { + Hybrid::forEach(v, [&s](auto&& vi) { Generic::readBinary(s, vi); }); + } + template <class BitVector> static void truncate(Vector& v, const BitVector& tr) { sparseRangeFor(v, [&tr](auto&& vi, auto&& i) { @@ -55,6 +65,11 @@ struct Helper<FieldVector<Field, n>> { s.write(reinterpret_cast<const char*>(&vi), sizeof(Field)); } + static void readBinary(std::ostream& s, Vector& v) { + for (auto&& vi : v) + s.write(reinterpret_cast<char*>(&vi), sizeof(Field)); + } + template<class BitVector> static void truncate(Vector& v, const BitVector& tr) { for (auto it = v.begin(), end = v.end(); it != end; ++it)