From e584c4caea6ae73ea65a6ae035834bff0b979cef Mon Sep 17 00:00:00 2001
From: Max Kahnt <max.kahnt@fu-berlin.de>
Date: Mon, 25 Sep 2017 14:09:03 +0200
Subject: [PATCH] Add readBinary (import from dune-solvers).

---
 dune/matrix-vector/genericvectortools.hh | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/dune/matrix-vector/genericvectortools.hh b/dune/matrix-vector/genericvectortools.hh
index 493c6c6..4b753e5 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)
-- 
GitLab