From c0c46ec3f4dc4d344f13d4e63d80eb9a2555d29f Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Wed, 3 Feb 2016 14:45:25 +0100 Subject: [PATCH] make saving/loading or rotamer libraries faster --- sidechain/src/bb_dep_rotamer_lib.cc | 11 +++-------- sidechain/src/rotamer_lib.cc | 8 ++------ sidechain/src/rotamer_lib_entry.hh | 12 ------------ 3 files changed, 5 insertions(+), 26 deletions(-) diff --git a/sidechain/src/bb_dep_rotamer_lib.cc b/sidechain/src/bb_dep_rotamer_lib.cc index 8637c35a..357a5ce2 100644 --- a/sidechain/src/bb_dep_rotamer_lib.cc +++ b/sidechain/src/bb_dep_rotamer_lib.cc @@ -133,10 +133,7 @@ void BBDepRotamerLib::Save(const String& filename){ } out_stream.write(reinterpret_cast<char*>(&total_num_rotamers_),sizeof(uint64_t)); - for(uint i = 0; i < total_num_rotamers_; ++i){ - out_stream << static_data_[i]; - } - + out_stream.write(reinterpret_cast<char*>(&static_data_[0]),total_num_rotamers_ * sizeof(RotamerLibEntry)); out_stream.close(); } @@ -198,10 +195,8 @@ BBDepRotamerLibPtr BBDepRotamerLib::Load(const String& filename){ in_stream.read(reinterpret_cast<char*>(&p->total_num_rotamers_),sizeof(uint64_t)); p->static_data_ = new RotamerLibEntry[p->total_num_rotamers_]; - for(uint i = 0; i < p->total_num_rotamers_; ++i){ - in_stream >> p->static_data_[i]; - } - in_stream.close(); + in_stream.read(reinterpret_cast<char*>(&p->static_data_[0]),p->total_num_rotamers_ * sizeof(RotamerLibEntry)); + return p; } diff --git a/sidechain/src/rotamer_lib.cc b/sidechain/src/rotamer_lib.cc index c6bd203c..4e2a567a 100644 --- a/sidechain/src/rotamer_lib.cc +++ b/sidechain/src/rotamer_lib.cc @@ -57,9 +57,7 @@ void RotamerLib::Save(const String& filename){ } out_stream.write(reinterpret_cast<char*>(&total_num_rotamers_),sizeof(uint64_t)); - for(uint i = 0; i < total_num_rotamers_; ++i){ - out_stream << static_data_[i]; - } + out_stream.write(reinterpret_cast<char*>(&static_data_[0]),total_num_rotamers_ * sizeof(RotamerLibEntry)); out_stream.close(); } @@ -112,9 +110,7 @@ RotamerLibPtr RotamerLib::Load(const String& filename){ in_stream.read(reinterpret_cast<char*>(&p->total_num_rotamers_),sizeof(uint64_t)); p->static_data_ = new RotamerLibEntry[p->total_num_rotamers_]; - for(uint i = 0; i < p->total_num_rotamers_; ++i){ - in_stream >> p->static_data_[i]; - } + in_stream.read(reinterpret_cast<char*>(&p->static_data_[0]),p->total_num_rotamers_ * sizeof(RotamerLibEntry)); in_stream.close(); return p; } diff --git a/sidechain/src/rotamer_lib_entry.hh b/sidechain/src/rotamer_lib_entry.hh index 31e271ca..7e8afd80 100644 --- a/sidechain/src/rotamer_lib_entry.hh +++ b/sidechain/src/rotamer_lib_entry.hh @@ -69,18 +69,6 @@ struct RotamerLibEntry{ bool SimilarDihedral(RotamerLibEntryPtr other, uint dihedral_idx, Real thresh, const String& res_name); - friend std::ofstream& operator<<(std::ofstream& os, RotamerLibEntry& entry){ - //assumes all variables being in memory in a consecutive order... - os.write(reinterpret_cast<char*>(&entry.probability),9*sizeof(Real)); - return os; - } - - friend std::ifstream& operator>>(std::ifstream& is, RotamerLibEntry& entry){ - //assumes all variables being in memory in a consecutive order... - is.read(reinterpret_cast<char*>(&entry.probability),9*sizeof(Real)); - return is; - } - // portable serialization // (cleanly element by element with fixed-width base-types) template <typename DS> -- GitLab