diff --git a/include/ufo/solver.hpp b/include/ufo/solver.hpp index 169c71a..d598ed6 100644 --- a/include/ufo/solver.hpp +++ b/include/ufo/solver.hpp @@ -104,23 +104,32 @@ namespace ufo return output; } - class Hdf5File + class Hdf5file { public: - inline Hdf5File(std::string filename) : File_(filename, HighFive::File::ReadWrite - | HighFive::File::Create | HighFive::File::Truncate) {} - template inline Hdf5File& read(T& object, std::string name) + inline Hdf5file& open_for_read(std::string filename) { - object = File_.getDataSet(name).read>(); + File_ = HighFive::File(filename, HighFive::File::ReadOnly); return *this; } - template inline Hdf5File& write(const T& object, std::string name) + inline Hdf5file& open_for_write(std::string filename) { - File_.createDataSet(name, object); + File_ = HighFive::File(filename, HighFive::File::ReadWrite | HighFive::File::Create + | HighFive::File::Truncate); + return *this; + } + template inline Hdf5file& read(T& object, std::string name) + { + object = File_->getDataSet(name).read>(); + return *this; + } + template inline Hdf5file& write(const T& object, std::string name) + { + File_->createDataSet(name, object); return *this; } protected: - HighFive::File File_; + std::optional File_; }; }; } diff --git a/src/plot.cpp b/src/plot.cpp index 6b6bf8a..b9fbb70 100644 --- a/src/plot.cpp +++ b/src/plot.cpp @@ -60,7 +60,7 @@ namespace ufo { std::vector resolution{ Resolution.first, Resolution.second }; std::vector range{ Range.first, Range.second }; - Hdf5File(filename).write(Values, "Values") + Hdf5file{}.open_for_write(filename).write(Values, "Values") .write(XTicks, "XTicks") .write(YTicks, "YTicks") .write(resolution, "Resolution") diff --git a/src/unfold.cpp b/src/unfold.cpp index 3f9bbc5..84eb6a1 100644 --- a/src/unfold.cpp +++ b/src/unfold.cpp @@ -135,7 +135,7 @@ namespace ufo { std::vector>> frequency, path; std::vector>>> eigenvector_vector; - Hdf5File(QpointDataInputFile.FileName).read(frequency, "/frequency") + Hdf5file{}.open_for_read(QpointDataInputFile.FileName).read(frequency, "/frequency") .read(eigenvector_vector, "/eigenvector") .read(path, "/path"); std::vector size = { frequency.size(), frequency[0].size(), frequency[0][0].size() }; @@ -247,7 +247,7 @@ namespace ufo Weight.back().push_back(mode.Weight); } } - Hdf5File(filename).write(Qpoint, "/Qpoint") + Hdf5file{}.open_for_write(filename).write(Qpoint, "/Qpoint") .write(Source, "/Source") .write(Frequency, "/Frequency") .write(Weight, "/Weight");