]> git.treefish.org Git - phys/latlib.git/blobdiff - configcache.cpp
Using hashed parameter strings in cachefilenames.
[phys/latlib.git] / configcache.cpp
index 5987789104e623233abefc0337888b390dc96b6c..bdc593e3c53131ff78e3a869707a7b3c8886c7e7 100644 (file)
@@ -53,13 +53,22 @@ configcache::configcache(const string& cacheid, const int& nequi, const int& nsk
   refetchDataFiles = false;
 }
 
+string configcache::paraString() {
+  stringstream parastring;
+
+  for(int ipara=0; ipara<Paras.size(); ipara++)
+    parastring << "_" << Paras[ipara].id << Paras[ipara].val;
+  
+  return parastring.str();
+}
+
 string configcache::getFileId(int actnequi, const bool& shortid)
 {
   stringstream fileid;
 
   if(!shortid) fileid << CACHEID << "_" << actnequi << "_" << NSKIP;
-  for(int ipara=0; ipara<Paras.size(); ipara++)
-    fileid << "_" << Paras[ipara].id << Paras[ipara].val;
+
+  fileid << "_" << hash( paraString() );
 
   return fileid.str();
 }
@@ -213,6 +222,8 @@ void configcache::readConfig(bool *readnewconfig, int *nequileft, vector<unsigne
       }
 
       while( (!inFile.is_open()) && inFiles.size() > 0 ) {
+       string inFileParaString;
+
        openFileDesc = *inFileIt;
 
        if (openFileDesc.nequi < NEQUI)
@@ -225,6 +236,12 @@ void configcache::readConfig(bool *readnewconfig, int *nequileft, vector<unsigne
        if(log) *log << "CCACHE: Opening dat-file: " << inFileIt->filename << endl << flush;
        inFile.open( (DATADIR + "/" + inFileIt->filename).c_str(), std::ios::binary );
        
+       getline( inFile, inFileParaString );
+       if( inFileParaString != paraString() ) {
+         if(log) *log << "CCACHE: Parastring does not match. Closing dat-file..." << endl << flush;
+         inFile.close();
+       }
+
        inFiles.erase(inFileIt);
        
        if( !inFile.is_open() ) continue;
@@ -299,6 +316,8 @@ void configcache::openOutFile(int actnequi)
   
   outFile.open( outFileName.str().c_str(), std::ios::binary );
 
+  outFile << paraString() << endl;
+
   ioBuffers->out = new boost::iostreams::filtering_ostreambuf;
   ioBuffers->out->push(boost::iostreams::bzip2_compressor());
   ioBuffers->out->push(outFile);