]> git.treefish.org Git - phys/latlib.git/blobdiff - configcache.cpp
Fixed unhashed fileid creation.
[phys/latlib.git] / configcache.cpp
index 5987789104e623233abefc0337888b390dc96b6c..59472e9c31856ca4c297945087d93b5502bdd798 100644 (file)
@@ -53,13 +53,25 @@ configcache::configcache(const string& cacheid, const int& nequi, const int& nsk
   refetchDataFiles = false;
 }
 
-string configcache::getFileId(int actnequi, const bool& shortid)
+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& superextended, 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;
+
+  if( superextended )
+    fileid << "_" << hash( paraString() );
+  else
+    fileid << paraString();
 
   return fileid.str();
 }
@@ -91,10 +103,18 @@ bool configcache::isValidInFile(const string& infile, infiledesc *filedesc)
 
   if( infile.size() < 4 ) return false;
 
-  if( infile.substr(infile.size()-4) == ".dat" )
+  if( infile.substr(infile.size()-4) == ".dat" ) {
     filedesc->extended = false;
-  else if( infile.substr(infile.size()-4) == "edat" )
+    filedesc->superextended = false;
+  }
+  else if( infile.substr(infile.size()-4) == "edat" ) {
     filedesc->extended = true;
+    filedesc->superextended = false;
+  }
+  else if( infile.substr(infile.size()-4) == "sdat" ) {
+    filedesc->extended = true;
+    filedesc->superextended = true;
+  }
   else
     return false;
 
@@ -126,7 +146,7 @@ bool configcache::isValidInFile(const string& infile, infiledesc *filedesc)
 
   delete[] inchar;
 
-  if( truncIn.find( getFileId(NEQUI, true) + "_" ) == string::npos ) return false;
+  if( truncIn.find( getFileId(NEQUI, filedesc->superextended, true) + "_" ) == string::npos ) return false;
 
   return true;
 }
@@ -213,6 +233,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 +247,14 @@ 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 );
        
+       if( openFileDesc.superextended ) {
+         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;
@@ -281,7 +311,7 @@ void configcache::openOutFile(int actnequi)
   
   while (true) {
     outFileName.str("");
-    outFileName << DATADIR << "/" << secstamp << "." << iseq << "_" << getFileId(actnequi) << "_.edat.tmp";
+    outFileName << DATADIR << "/" << secstamp << "." << iseq << "_" << getFileId(actnequi, true, false) << "_.sdat.tmp";
 
     int tmpfd = open(outFileName.str().c_str(), O_CREAT | O_EXCL, 0644);
 
@@ -299,6 +329,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);