NuTo
Numerics Tool
SerializeStreamIn.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include <Eigen/Core>
5 
6 namespace NuTo
7 {
10 {
11 public:
15  SerializeStreamIn(const std::string& rFile, bool rIsBinary);
16 
17  virtual ~SerializeStreamIn() = default;
18  SerializeStreamIn(const SerializeStreamIn&) = delete;
19 
23  template <typename T>
24  inline friend SerializeStreamIn& operator>>(SerializeStreamIn& rStream, T& rData)
25  {
26  rStream.Serialize(rData);
27  return rStream;
28  }
29 
30  template <typename T>
31  void Serialize(T& rData)
32  {
33  rData.NuToSerializeLoad(*this);
34  }
35  void Serialize(double& rData)
36  {
37  SerializePrimitiveType(rData);
38  }
39  void Serialize(int& rData)
40  {
41  SerializePrimitiveType(rData);
42  }
43  void Serialize(bool& rData)
44  {
45  SerializePrimitiveType(rData);
46  }
47 
48  template <typename T, int TRows, int TCols, int TOptions, int TMaxRows, int TMaxCols>
50  {
51  LoadMatrix(rMatrix);
52  }
53 
54  template <typename T, int TRows, int TCols, int TOptions, int TMaxRows, int TMaxCols>
56  {
57  const auto& rows = rMatrix.rows();
58  const auto& cols = rMatrix.cols();
59  auto* data = rMatrix.data();
60  if (mIsBinary)
61  {
62  mFileStream.read(reinterpret_cast<char*>(data), rows * cols * sizeof(T));
63  }
64  else
65  {
66  std::string line;
67  std::getline(mFileStream, line); // ignore one line of debug info
68  for (int i = 0; i < rows * cols; ++i)
69  {
70  std::getline(mFileStream, line);
71  data[i] = std::stod(line);
72  }
73  }
74  }
75 
77  void Separator();
78 
79 private:
80  template <typename T>
81  void SerializePrimitiveType(T& rData)
82  {
83  if (mIsBinary)
84  {
85  mFileStream.read(reinterpret_cast<char*>(&rData), sizeof(T));
86  }
87  else
88  {
89  std::string line;
90  std::getline(mFileStream, line); // ignore one line of debug info
91  std::getline(mFileStream, line); // extract value
92  rData = static_cast<T>(std::stod(line));
93  }
94  }
95 };
96 } // namespace NuTo
void Serialize(double &rData)
Definition: SerializeStreamIn.h:35
void Serialize(bool &rData)
Definition: SerializeStreamIn.h:43
void Separator()
reads a sequence from the stream
Definition: SerializeStreamIn.cpp:16
void Serialize(int &rData)
Definition: SerializeStreamIn.h:39
virtual ~SerializeStreamIn()=default
Serialize input stream.
Definition: SerializeStreamIn.h:9
friend SerializeStreamIn & operator>>(SerializeStreamIn &rStream, T &rData)
in-stream operator
Definition: SerializeStreamIn.h:24
void Serialize(Eigen::Matrix< T, TRows, TCols, TOptions, TMaxRows, TMaxCols > &rMatrix)
Definition: SerializeStreamIn.h:49
void LoadMatrix(Eigen::Matrix< T, TRows, TCols, TOptions, TMaxRows, TMaxCols > &rMatrix)
Definition: SerializeStreamIn.h:55
void Serialize(T &rData)
Definition: SerializeStreamIn.h:31
const bool mIsBinary
Definition: SerializeStreamBase.h:18
SerializeStreamIn(const std::string &rFile, bool rIsBinary)
ctor
Definition: SerializeStreamIn.cpp:4
Definition: Exception.h:6
Definition: SerializeStreamOut.h:9
Base class for the NuTo SerializeStream Used for the serialization of data values only...
Definition: SerializeStreamBase.h:10
std::fstream mFileStream
Definition: SerializeStreamBase.h:19