]> git.treefish.org Git - phys/latlib.git/commitdiff
Using hashed parameter strings in cachefilenames.
authorAlexander Schmidt <alex@treefish.org>
Thu, 13 Mar 2014 15:25:04 +0000 (16:25 +0100)
committerAlexander Schmidt <alex@treefish.org>
Thu, 13 Mar 2014 17:09:15 +0000 (18:09 +0100)
Unhashed parastrings are stored in first line of cachefiles and checked on open.

Using hashed parameter string for cache file names.

Generating parastring in seperate function.

Write parastring into first line of cachefile.

Checking unhashed parastring when opening cachefile.

configcache.cpp
configcache.h

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);
index 6054198a725b6795aa767982c02f185db7e889b3..a7c59740deb44c7ac46589690016df2c8b149f9b 100644 (file)
@@ -105,6 +105,8 @@ class configcache{
   int nequileft_internal;
 
   bool doVirtualEquilibration, firstUsedConfig;
+
+  string paraString();
 };
 
 #endif