mirror of
https://github.com/glest/glest-source.git
synced 2025-08-13 20:03:58 +02:00
bug fixes for CRC caching and working version of cache manager
This commit is contained in:
@@ -14,7 +14,11 @@
|
||||
#define _SHARED_PLATFORMCOMMON_CACHEMANAGER_H_
|
||||
|
||||
#include "thread.h"
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
|
||||
using namespace std;
|
||||
using namespace Shared::Platform;
|
||||
|
||||
namespace Shared { namespace PlatformCommon {
|
||||
@@ -26,9 +30,8 @@ namespace Shared { namespace PlatformCommon {
|
||||
class CacheManager
|
||||
{
|
||||
protected:
|
||||
Mutex mutexCache;
|
||||
|
||||
static std::map<string, bool> masterCacheList;
|
||||
static Mutex mutexCache;
|
||||
static std::map<std::string, bool> masterCacheList;
|
||||
|
||||
typedef enum {
|
||||
cacheItemGet,
|
||||
@@ -36,12 +39,23 @@ protected:
|
||||
} CacheAccessorType;
|
||||
|
||||
template <typename T>
|
||||
static T manageCachedItem(string cacheKey, T *value,CacheAccessorType accessor) {
|
||||
static std::map<string, T> itemCache;
|
||||
static T & manageCachedItem(string cacheKey, T *value,CacheAccessorType accessor) {
|
||||
static std::map<string, T > itemCache;
|
||||
|
||||
if(accessor == cacheItemSet) {
|
||||
if(value == NULL) {
|
||||
throw runtime_error("Unexpected NULL object setting cache value!");
|
||||
}
|
||||
masterCacheList[cacheKey] = true;
|
||||
itemCache[cacheKey] = *value;
|
||||
try {
|
||||
mutexCache.p();
|
||||
itemCache[cacheKey] = *value;
|
||||
mutexCache.v();
|
||||
}
|
||||
catch(const std::exception &ex) {
|
||||
mutexCache.v();
|
||||
throw runtime_error(ex.what());
|
||||
}
|
||||
}
|
||||
return itemCache[cacheKey];
|
||||
}
|
||||
@@ -56,11 +70,11 @@ public:
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static T setCachedItem(string cacheKey, T value) {
|
||||
static void setCachedItem(string cacheKey, const T value) {
|
||||
manageCachedItem<T>(cacheKey,value,cacheItemSet);
|
||||
}
|
||||
template <typename T>
|
||||
static T getCachedItem(string cacheKey) {
|
||||
static T & getCachedItem(string cacheKey) {
|
||||
return manageCachedItem<T>(cacheKey,NULL,cacheItemGet);
|
||||
}
|
||||
|
||||
|
@@ -9,3 +9,11 @@
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
#include "cache_manager.h"
|
||||
|
||||
namespace Shared { namespace PlatformCommon {
|
||||
|
||||
Mutex CacheManager::mutexCache;
|
||||
std::map<string, bool> CacheManager::masterCacheList;
|
||||
|
||||
}}//end namespace
|
||||
|
@@ -290,9 +290,10 @@ int32 getFolderTreeContentsCheckSumRecursively(vector<string> paths, string path
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
static std::map<string,int32> crcTreeCache;
|
||||
//string cacheLookupId = string(__FILE__) + intToStr(__LINE__);
|
||||
//std::map<string,int32> &crcTreeCache = CacheManager::getCachedItem(cacheLookupId);
|
||||
// !!! OLD local CACHE
|
||||
//static std::map<string,int32> crcTreeCache;
|
||||
string cacheLookupId = string(__FILE__) + intToStr(__LINE__);
|
||||
std::map<string,int32> &crcTreeCache = CacheManager::getCachedItem< std::map<string,int32> >(cacheLookupId);
|
||||
|
||||
string cacheKey = "";
|
||||
size_t count = paths.size();
|
||||
@@ -328,8 +329,12 @@ int32 getFolderTreeContentsCheckSumRecursively(vector<string> paths, string path
|
||||
//finds all filenames like path and gets their checksum of all files combined
|
||||
int32 getFolderTreeContentsCheckSumRecursively(const string &path, const string &filterFileExt, Checksum *recursiveChecksum) {
|
||||
|
||||
// !!! OLD local CACHE
|
||||
//static std::map<string,int32> crcTreeCache;
|
||||
string cacheLookupId = string(__FILE__) + intToStr(__LINE__);
|
||||
std::map<string,int32> &crcTreeCache = CacheManager::getCachedItem< std::map<string,int32> >(cacheLookupId);
|
||||
|
||||
string cacheKey = path + "_" + filterFileExt;
|
||||
static std::map<string,int32> crcTreeCache;
|
||||
if(crcTreeCache.find(cacheKey) != crcTreeCache.end()) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] scanning [%s] found CACHED checksum = %d for cacheKey [%s]\n",__FILE__,__FUNCTION__,path.c_str(),crcTreeCache[cacheKey],cacheKey.c_str());
|
||||
return crcTreeCache[cacheKey];
|
||||
@@ -428,7 +433,9 @@ int32 getFolderTreeContentsCheckSumRecursively(const string &path, const string
|
||||
vector<std::pair<string,int32> > getFolderTreeContentsCheckSumListRecursively(vector<string> paths, string pathSearchString, string filterFileExt, vector<std::pair<string,int32> > *recursiveMap) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
static std::map<string,vector<std::pair<string,int32> > > crcTreeCache;
|
||||
//static std::map<string,vector<std::pair<string,int32> > > crcTreeCache;
|
||||
string cacheLookupId = string(__FILE__) + intToStr(__LINE__);
|
||||
std::map<string,vector<std::pair<string,int32> > > &crcTreeCache = CacheManager::getCachedItem< std::map<string,vector<std::pair<string,int32> > > >(cacheLookupId);
|
||||
|
||||
string cacheKey = "";
|
||||
size_t count = paths.size();
|
||||
@@ -457,8 +464,11 @@ vector<std::pair<string,int32> > getFolderTreeContentsCheckSumListRecursively(ve
|
||||
//finds all filenames like path and gets the checksum of each file
|
||||
vector<std::pair<string,int32> > getFolderTreeContentsCheckSumListRecursively(const string &path, const string &filterFileExt, vector<std::pair<string,int32> > *recursiveMap) {
|
||||
|
||||
//static std::map<string,vector<std::pair<string,int32> > > crcTreeCache;
|
||||
string cacheLookupId = string(__FILE__) + intToStr(__LINE__);
|
||||
std::map<string,vector<std::pair<string,int32> > > &crcTreeCache = CacheManager::getCachedItem< std::map<string,vector<std::pair<string,int32> > > >(cacheLookupId);
|
||||
|
||||
string cacheKey = path + "_" + filterFileExt;
|
||||
static std::map<string,vector<std::pair<string,int32> > > crcTreeCache;
|
||||
if(crcTreeCache.find(cacheKey) != crcTreeCache.end()) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] scanning [%s] FOUND CACHED result for cacheKey [%s]\n",__FILE__,__FUNCTION__,path.c_str(),cacheKey.c_str());
|
||||
return crcTreeCache[cacheKey];
|
||||
|
@@ -34,24 +34,17 @@ void FileCRCPreCacheThread::execute() {
|
||||
findDirs(techDataPaths, techPaths);
|
||||
if(techPaths.empty() == false) {
|
||||
for(unsigned int idx = 0; idx < techPaths.size(); idx++) {
|
||||
string &techPath = techPaths[idx];
|
||||
for(unsigned int idx2 = 0; idx2 < techPaths.size(); idx2++) {
|
||||
string techName = techPaths[idx2];
|
||||
string techName = techPaths[idx];
|
||||
|
||||
printf("In [%s::%s Line: %d] caching CRC value for Tech [%s]\n",__FILE__,__FUNCTION__,__LINE__,techName.c_str());
|
||||
int32 techCRC = getFolderTreeContentsCheckSumRecursively(techDataPaths, string("/") + techName + string("/*"), ".xml", NULL);
|
||||
printf("In [%s::%s Line: %d] cached CRC value for Tech [%s] is [%d]\n",__FILE__,__FUNCTION__,__LINE__,techName.c_str(),techCRC);
|
||||
printf("In [%s::%s Line: %d] caching CRC value for Tech [%s] [%d of %d]\n",__FILE__,__FUNCTION__,__LINE__,techName.c_str(),idx+1,techPaths.size());
|
||||
int32 techCRC = getFolderTreeContentsCheckSumRecursively(techDataPaths, string("/") + techName + string("/*"), ".xml", NULL);
|
||||
printf("In [%s::%s Line: %d] cached CRC value for Tech [%s] is [%d] [%d of %d]\n",__FILE__,__FUNCTION__,__LINE__,techName.c_str(),techCRC,idx+1,techPaths.size());
|
||||
|
||||
if(getQuitStatus() == true) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
break;
|
||||
}
|
||||
sleep( 100 );
|
||||
}
|
||||
if(getQuitStatus() == true) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
break;
|
||||
}
|
||||
sleep( 100 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user