X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/22d4f36d4bbd95447a454cceb9084af46927e023..36bc55ceb7b62569c7604f28b3e53bc2e42cf0ce:/hypercache.cpp?ds=sidebyside diff --git a/hypercache.cpp b/hypercache.cpp index 6c8e190..7b3f470 100644 --- a/hypercache.cpp +++ b/hypercache.cpp @@ -5,16 +5,16 @@ vector hypercache::delayedParaAdd; vector hypercache::delayedParaSet; string hypercache::activeCFile = ""; vector hypercache::parentConfigs; -writeout *hypercache::out = NULL; +ostream* hypercache::log; vector hypercache::Os; void hypercache::initCache(configcache **cache, const string& cacheid, const int& nequi, const int& nskip, const string& datadir, - char **configmem, const int& configMemSize, const int& cachemode, writeout *out_a) { - if ( out_a != NULL ) - out = out_a; + char **configmem, const int& configMemSize, const int& cachemode, ostream* _log) { + if ( _log != NULL ) + log = _log; - *cache = new configcache(cacheid, nequi, nskip, datadir, configmem, configMemSize, cachemode, out_a); + *cache = new configcache(cacheid, nequi, nskip, datadir, configmem, configMemSize, cachemode, log); for (vector::iterator parit=delayedParaAdd.begin(); parit != delayedParaAdd.end(); ++parit) (*cache)->addPara(parit->parid, parit->val); @@ -60,44 +60,36 @@ string hypercache::fileOfPath(const string& dressedfile) { return dressedfile.substr(dressedfile.find_last_of("\\/")+1); } -int hypercache::readC() { - int readret; +void hypercache::readC(bool& readnewconfig, int& nequileft) { + C->readConfig(readnewconfig, nequileft, &parentConfigs); - readret = C->readConfig(&parentConfigs); - - if ( readret == -1 ) + if ( nequileft < 0 ) activeCFile = fileOfPath(C->getInFileName()); else activeCFile = ""; - - return readret; } -void hypercache::writeC() { - C->writeConfig(); +void hypercache::writeC(int actnequi) { + C->writeConfig(actnequi); activeCFile = fileOfPath( C->getOutFileName().substr( 0, C->getOutFileName().length()-4 ) ); } -void hypercache::writeO(int obsid) { +void hypercache::writeO(int obsid, int actnequi) { if ( activeCFile != "" ) { unsigned long afilehash = configcache::hash(activeCFile); - Os[obsid]->writeHeader("concurrent_cfile", (char*)(&afilehash), sizeof(unsigned long)); + Os[obsid]->writeHeader("concurrent_cfile", (char*)(&afilehash), sizeof(unsigned long), actnequi); } - Os[obsid]->writeConfig(); + Os[obsid]->writeConfig(actnequi); } -int hypercache::readO(int obsid) { - int readret; +void hypercache::readO(int obsid, bool& readnewconfig, int& nequileft) { + Os[obsid]->readConfig(readnewconfig, nequileft); - readret = Os[obsid]->readConfig(); - - if ( readret == -1 ) { + if ( nequileft < 0 ) { unsigned long *parentconfig = (unsigned long*)Os[obsid]->getHeader("concurrent_cfile"); if ( parentconfig != NULL ) addParentConfig(parentconfig); } - - return readret; } void hypercache::addParentConfig(const unsigned long *parentconfig) {