Loading src/Io/IoNgSerializer.h +14 −5 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ public: /* write functions START */ template<typename T> void write(String name2, bool write(String name2, const T& what, WriteMode allowOverwrite = NO_OVERWRITE, typename EnableIf<Loki::TypeTraits<T>::isArith || Loading @@ -152,9 +152,10 @@ public: dims[0] = 1; if (allowOverwrite) overwrite<T>(name, ptr, dims, 1); return overwrite<T>(name, ptr, dims, 1); else internalWrite<T>(name, ptr, dims, 1); return true; } void write(String name2, String what, WriteMode allowOverwrite = NO_OVERWRITE) Loading Loading @@ -627,13 +628,21 @@ private: } template<typename SomeType> void overwrite(String name, const void* ptr, hsize_t dims[], SizeType ndims) bool overwrite(String name, const void* ptr, hsize_t dims[], SizeType ndims) { try { hdf5file_->unlink(name); } catch (...) {} } catch (...) { std::cerr<<"Cannot unlink "<<name<<"\n"; } try { internalWrite<SomeType>(name, ptr, dims, ndims); } catch (...) { return false; } return true; } template<typename SomeType> Loading src/Matrix.h +13 −5 Original line number Diff line number Diff line Loading @@ -153,8 +153,11 @@ public: IoSerializer& ioSerializer, IoSerializer::WriteMode wM = IoSerializer::NO_OVERWRITE) const { bool flag = false; if (wM == IoSerializer::ALLOW_OVERWRITE) return overwrite(label, ioSerializer); flag = overwrite(label, ioSerializer); if (flag) return; ioSerializer.createGroup(label); ioSerializer.write(label + "/nrow_", nrow_); Loading @@ -163,12 +166,17 @@ public: ioSerializer.write(label + "/data_", data_); } void overwrite(String label, IoSerializer& ioSerializer) const bool overwrite(String label, IoSerializer& ioSerializer) const { ioSerializer.write(label + "/nrow_", nrow_, IoSerializer::ALLOW_OVERWRITE); ioSerializer.write(label + "/ncol_", ncol_, IoSerializer::ALLOW_OVERWRITE); if (nrow_ == 0 || ncol_ == 0) return; bool b = ioSerializer.write(label + "/nrow_", nrow_, IoSerializer::ALLOW_OVERWRITE); if (!b) return b; b = ioSerializer.write(label + "/ncol_", ncol_, IoSerializer::ALLOW_OVERWRITE); if (!b) return b; if (nrow_ == 0 || ncol_ == 0) return b; ioSerializer.write(label + "/data_", data_, IoSerializer::ALLOW_OVERWRITE); return true; } void print(int fd) const Loading Loading
src/Io/IoNgSerializer.h +14 −5 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ public: /* write functions START */ template<typename T> void write(String name2, bool write(String name2, const T& what, WriteMode allowOverwrite = NO_OVERWRITE, typename EnableIf<Loki::TypeTraits<T>::isArith || Loading @@ -152,9 +152,10 @@ public: dims[0] = 1; if (allowOverwrite) overwrite<T>(name, ptr, dims, 1); return overwrite<T>(name, ptr, dims, 1); else internalWrite<T>(name, ptr, dims, 1); return true; } void write(String name2, String what, WriteMode allowOverwrite = NO_OVERWRITE) Loading Loading @@ -627,13 +628,21 @@ private: } template<typename SomeType> void overwrite(String name, const void* ptr, hsize_t dims[], SizeType ndims) bool overwrite(String name, const void* ptr, hsize_t dims[], SizeType ndims) { try { hdf5file_->unlink(name); } catch (...) {} } catch (...) { std::cerr<<"Cannot unlink "<<name<<"\n"; } try { internalWrite<SomeType>(name, ptr, dims, ndims); } catch (...) { return false; } return true; } template<typename SomeType> Loading
src/Matrix.h +13 −5 Original line number Diff line number Diff line Loading @@ -153,8 +153,11 @@ public: IoSerializer& ioSerializer, IoSerializer::WriteMode wM = IoSerializer::NO_OVERWRITE) const { bool flag = false; if (wM == IoSerializer::ALLOW_OVERWRITE) return overwrite(label, ioSerializer); flag = overwrite(label, ioSerializer); if (flag) return; ioSerializer.createGroup(label); ioSerializer.write(label + "/nrow_", nrow_); Loading @@ -163,12 +166,17 @@ public: ioSerializer.write(label + "/data_", data_); } void overwrite(String label, IoSerializer& ioSerializer) const bool overwrite(String label, IoSerializer& ioSerializer) const { ioSerializer.write(label + "/nrow_", nrow_, IoSerializer::ALLOW_OVERWRITE); ioSerializer.write(label + "/ncol_", ncol_, IoSerializer::ALLOW_OVERWRITE); if (nrow_ == 0 || ncol_ == 0) return; bool b = ioSerializer.write(label + "/nrow_", nrow_, IoSerializer::ALLOW_OVERWRITE); if (!b) return b; b = ioSerializer.write(label + "/ncol_", ncol_, IoSerializer::ALLOW_OVERWRITE); if (!b) return b; if (nrow_ == 0 || ncol_ == 0) return b; ioSerializer.write(label + "/data_", data_, IoSerializer::ALLOW_OVERWRITE); return true; } void print(int fd) const Loading