diff --git a/projects/mtg/include/WResourceManager.h b/projects/mtg/include/WResourceManager.h index a369046f0..b9656aa80 100644 --- a/projects/mtg/include/WResourceManager.h +++ b/projects/mtg/include/WResourceManager.h @@ -33,45 +33,45 @@ enum ENUM_WRES_INFO{ - WRES_UNLOCKED = 0, //Resource is unlocked. - WRES_MAX_LOCK = 250, //Maximum number of locks for a resource. - WRES_PERMANENT = 251, //Resource is permanent (ie, managed) - WRES_UNDERLOCKED = 252, //Resource was released too many times. + WRES_UNLOCKED = 0, //Resource is unlocked. + WRES_MAX_LOCK = 250, //Maximum number of locks for a resource. + WRES_PERMANENT = 251, //Resource is permanent (ie, managed) + WRES_UNDERLOCKED = 252, //Resource was released too many times. }; enum ENUM_RETRIEVE_STYLE{ - RETRIEVE_EXISTING, //Only returns a resource if it already exists. Does not lock or unlock. - RETRIEVE_NORMAL, //Returns or creates a resource. Does not change lock status. - RETRIEVE_LOCK, //As above, locks cached resource. Not for quads. - RETRIEVE_UNLOCK, //As above, unlocks cached resource. Not for quads. - RETRIEVE_RESOURCE, //Only retrieves a managed resource. Does not make a new one. - RETRIEVE_MANAGE, //Makes resource permanent. - RETRIEVE_THUMB, //Retrieve it as a thumbnail. - CACHE_THUMB = RETRIEVE_THUMB, //Backwords compatibility. + RETRIEVE_EXISTING, //Only returns a resource if it already exists. Does not lock or unlock. + RETRIEVE_NORMAL, //Returns or creates a resource. Does not change lock status. + RETRIEVE_LOCK, //As above, locks cached resource. Not for quads. + RETRIEVE_UNLOCK, //As above, unlocks cached resource. Not for quads. + RETRIEVE_RESOURCE, //Only retrieves a managed resource. Does not make a new one. + RETRIEVE_MANAGE, //Makes resource permanent. + RETRIEVE_THUMB, //Retrieve it as a thumbnail. + CACHE_THUMB = RETRIEVE_THUMB, //Backwords compatibility. }; enum ENUM_CACHE_SUBTYPE{ - CACHE_NORMAL = (1<<0), //Use default values. Not really a flag. - CACHE_EXISTING = (1<<1), //Retrieve it only if it already exists - - //Because these bits only modify how a cached resource's Attempt() is called, - //We can use them over and over for each resource type. - TEXTURE_SUB_EXACT = (1<<2), //Don't do any fiddling with the filename. - TEXTURE_SUB_CARD = (1<<3), //Retrieve using cardFile, not graphicsFile. - TEXTURE_SUB_AVATAR = (1<<4), //Retrieve using avatarFile, not graphicsFile. - TEXTURE_SUB_THUMB = (1<<5),//Retrieve prepending "thumbnails\" to the filename. - TEXTURE_SUB_5551 = (1<<6), //For textures. If we have to allocate, use RGBA5551. + CACHE_NORMAL = (1<<0), //Use default values. Not really a flag. + CACHE_EXISTING = (1<<1), //Retrieve it only if it already exists + + //Because these bits only modify how a cached resource's Attempt() is called, + //We can use them over and over for each resource type. + TEXTURE_SUB_EXACT = (1<<2), //Don't do any fiddling with the filename. + TEXTURE_SUB_CARD = (1<<3), //Retrieve using cardFile, not graphicsFile. + TEXTURE_SUB_AVATAR = (1<<4), //Retrieve using avatarFile, not graphicsFile. + TEXTURE_SUB_THUMB = (1<<5),//Retrieve prepending "thumbnails\" to the filename. + TEXTURE_SUB_5551 = (1<<6), //For textures. If we have to allocate, use RGBA5551. }; enum ENUM_CACHE_ERROR{ - CACHE_ERROR_NONE = 0, - CACHE_ERROR_NOT_CACHED = CACHE_ERROR_NONE, - CACHE_ERROR_404, - CACHE_ERROR_BAD, //Something went wrong with item->attempt() - CACHE_ERROR_BAD_ALLOC, //Couldn't allocate item - CACHE_ERROR_LOST, - CACHE_ERROR_NOT_MANAGED, + CACHE_ERROR_NONE = 0, + CACHE_ERROR_NOT_CACHED = CACHE_ERROR_NONE, + CACHE_ERROR_404, + CACHE_ERROR_BAD, //Something went wrong with item->attempt() + CACHE_ERROR_BAD_ALLOC, //Couldn't allocate item + CACHE_ERROR_LOST, + CACHE_ERROR_NOT_MANAGED, }; struct WCacheSort{ @@ -79,147 +79,149 @@ struct WCacheSort{ }; template -class WCache{ +class WCache +{ public: - friend class WResourceManager; + friend class WResourceManager; - WCache(); - ~WCache(); - - cacheItem* Retrieve(int id, string filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); //Primary interface function. - bool Release(cacheActual* actual); //Releases an item, and deletes it if unlocked. - bool RemoveMiss(int id=0); //Removes a cache miss. - bool RemoveOldest(); //Remove oldest unlocked item. - bool Cleanup(); //Repeats RemoveOldest() until cache fits in size limits - void ClearUnlocked(); //Remove all unlocked items. - void Refresh(); //Refreshes all cache items. - unsigned int Flatten(); //Ensures that the times don't loop. Returns new lastTime. - void Resize(unsigned long size, int items); //Sets new limits, then enforces them. Lock safe, so not a "hard limit". + WCache(); + ~WCache(); + + cacheItem* Retrieve(int id, const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); //Primary interface function. + bool Release(cacheActual* actual); //Releases an item, and deletes it if unlocked. + bool RemoveMiss(int id=0); //Removes a cache miss. + bool RemoveOldest(); //Remove oldest unlocked item. + bool Cleanup(); //Repeats RemoveOldest() until cache fits in size limits + void ClearUnlocked(); //Remove all unlocked items. + void Refresh(); //Refreshes all cache items. + unsigned int Flatten(); //Ensures that the times don't loop. Returns new lastTime. + void Resize(unsigned long size, int items); //Sets new limits, then enforces them. Lock safe, so not a "hard limit". protected: - bool RemoveItem(cacheItem * item, bool force = true); //Removes an item, deleting it. if(force), ignores locks / permanent - bool UnlinkCache(cacheItem * item); //Removes an item from our cache, does not delete it. Use with care. - bool Delete(cacheItem * item); //SAFE_DELETE and garbage collect. If maxCached == 0, nullify first. (This means you have to free that cacheActual later!) - cacheItem* Get(int id, string filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); //Subordinate to Retrieve. - cacheItem* AttemptNew(string filename, int submode); //Attempts a new cache item, progressively clearing cache if it fails. + bool RemoveItem(cacheItem * item, bool force = true); //Removes an item, deleting it. if(force), ignores locks / permanent + bool UnlinkCache(cacheItem * item); //Removes an item from our cache, does not delete it. Use with care. + bool Delete(cacheItem * item); //SAFE_DELETE and garbage collect. If maxCached == 0, nullify first. (This means you have to free that cacheActual later!) + cacheItem* Get(int id, const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); //Subordinate to Retrieve. + cacheItem* AttemptNew(const string& filename, int submode); //Attempts a new cache item, progressively clearing cache if it fails. - int makeID(int id, string filename, int submode); //Makes an ID appropriate to the submode. + int makeID(int id, const string& filename, int submode); //Makes an ID appropriate to the submode. - map ids; - map cache; - map managed; //Cache can be arbitrarily large, so managed items are seperate. - unsigned long totalSize; - unsigned long cacheSize; - - //Applies to cacheSize only. - unsigned long maxCacheSize; - unsigned int maxCached; + map ids; + map cache; + map managed; //Cache can be arbitrarily large, so managed items are seperate. + unsigned long totalSize; + unsigned long cacheSize; - unsigned int cacheItems; - int mError; + //Applies to cacheSize only. + unsigned long maxCacheSize; + unsigned int maxCached; + + unsigned int cacheItems; + int mError; }; -struct WManagedQuad { - WCachedTexture * texture; - string resname; +struct WManagedQuad +{ + WCachedTexture * texture; + string resname; }; //This class is a wrapper for JResourceManager class WResourceManager: public JResourceManager { public: - WResourceManager(); - ~WResourceManager(); - - void Unmiss(string filename); - JQuad * RetrieveCard(MTGCard * card, int style = RETRIEVE_NORMAL,int submode = CACHE_NORMAL); - JSample * RetrieveSample(string filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); - JTexture * RetrieveTexture(string filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); - JQuad * RetrieveQuad(string filename, float offX=0.0f, float offY=0.0f, float width=0.0f, float height=0.0f, string resname="", int style = RETRIEVE_LOCK, int submode = CACHE_NORMAL, int id = 0); - JQuad * RetrieveTempQuad(string filename, int submode = CACHE_NORMAL); - hgeParticleSystemInfo * RetrievePSI(string filename, JQuad * texture, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); - int RetrieveError(); + WResourceManager(); + ~WResourceManager(); - void Release(JTexture * tex); - void Release(JSample * sample); - bool RemoveOldest(); - - bool Cleanup(); //Force a cleanup. Return false if nothing removed. - void ClearUnlocked(); //Remove unlocked items. - void Refresh(); //Refreshes all files in cache, for when mode/profile changes. + void Unmiss(string filename); + JQuad * RetrieveCard(MTGCard * card, int style = RETRIEVE_NORMAL,int submode = CACHE_NORMAL); + JSample * RetrieveSample(const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); + JTexture * RetrieveTexture(const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); + JQuad * RetrieveQuad(const string& filename, float offX=0.0f, float offY=0.0f, float width=0.0f, float height=0.0f, string resname="", int style = RETRIEVE_LOCK, int submode = CACHE_NORMAL, int id = 0); + JQuad * RetrieveTempQuad(const string& filename, int submode = CACHE_NORMAL); + hgeParticleSystemInfo * RetrievePSI(const string& filename, JQuad * texture, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); + int RetrieveError(); - unsigned int nowTime(); + void Release(JTexture * tex); + void Release(JSample * sample); + bool RemoveOldest(); - unsigned long Size(); - unsigned long SizeCached(); - unsigned long SizeManaged(); + bool Cleanup(); //Force a cleanup. Return false if nothing removed. + void ClearUnlocked(); //Remove unlocked items. + void Refresh(); //Refreshes all files in cache, for when mode/profile changes. - unsigned int Count(); - unsigned int CountCached(); - unsigned int CountManaged(); + unsigned int nowTime(); - int CreateQuad(const string &quadName, const string &textureName, float x, float y, float width, float height); - JQuad* GetQuad(const string &quadName); - JQuad* GetQuad(int id); + unsigned long Size(); + unsigned long SizeCached(); + unsigned long SizeManaged(); - int AddQuadToManaged(const WManagedQuad& inManagedQuad); + unsigned int Count(); + unsigned int CountCached(); + unsigned int CountManaged(); - //Our file redirect system. - string graphicsFile(const string filename); - string avatarFile(const string filename); - string cardFile(const string filename); - string musicFile(const string filename); - string sfxFile(const string filename); - int fileOK(string filename, bool relative = false); - int dirOK(string dirname); + int CreateQuad(const string &quadName, const string &textureName, float x, float y, float width, float height); + JQuad* GetQuad(const string &quadName); + JQuad* GetQuad(int id); - //For backwards compatibility with JResourceManager. Avoid using these, they're not optimal. - int CreateTexture(const string &textureName); - JTexture* GetTexture(const string &textureName); - JTexture* GetTexture(int id); + int AddQuadToManaged(const WManagedQuad& inManagedQuad); - // Font management functions - void InitFonts(const std::string& inLang); - int ReloadWFonts(); - WFont* LoadWFont(const string& inFontname, int inFontHeight, int inFontID); - WFont* GetWFont(int id); - void RemoveWFonts(); - - //Wrapped from JSoundSystem. TODO: Privatize. - JMusic * ssLoadMusic(const char *fileName); + //Our file redirect system. + string graphicsFile(const string& filename); + string avatarFile(const string& filename); + string cardFile(const string& filename); + string musicFile(const string& filename); + string sfxFile(const string& filename); + int fileOK(const string&, bool relative = false); + int dirOK(const string& dirname); - //Resets the cache limits on when it starts to purge data. - void ResetCacheLimits(); + //For backwards compatibility with JResourceManager. Avoid using these, they're not optimal. + int CreateTexture(const string &textureName); + JTexture* GetTexture(const string &textureName); + JTexture* GetTexture(int id); - void DebugRender(); + // Font management functions + void InitFonts(const std::string& inLang); + int ReloadWFonts(); + WFont* LoadWFont(const string& inFontname, int inFontHeight, int inFontID); + WFont* GetWFont(int id); + void RemoveWFonts(); + + //Wrapped from JSoundSystem. TODO: Privatize. + JMusic * ssLoadMusic(const char *fileName); + + //Resets the cache limits on when it starts to purge data. + void ResetCacheLimits(); + + void DebugRender(); #ifdef DEBUG_CACHE - unsigned long menuCached; - string debugMessage; + unsigned long menuCached; + string debugMessage; #endif private: - bool bThemedCards; //Does the theme have a "sets" directory for overwriting cards? - void FlattenTimes(); //To prevent bad cache timing on int overflow + bool bThemedCards; //Does the theme have a "sets" directory for overwriting cards? + void FlattenTimes(); //To prevent bad cache timing on int overflow - //For cached stuff - WCache textureWCache; - WCache sampleWCache; - WCache psiWCache; + //For cached stuff + WCache textureWCache; + WCache sampleWCache; + WCache psiWCache; - typedef std::map ManagedQuadMap; - ManagedQuadMap mManagedQuads; + typedef std::map ManagedQuadMap; + ManagedQuadMap mManagedQuads; - typedef std::map IDLookupMap; - IDLookupMap mIDLookupMap; - - //Statistics of record. - unsigned int lastTime; - int lastError; + typedef std::map IDLookupMap; + IDLookupMap mIDLookupMap; - typedef std::map FontMap; - FontMap mWFontMap; - std::string mFontFileExtension; + //Statistics of record. + unsigned int lastTime; + int lastError; + + typedef std::map FontMap; + FontMap mWFontMap; + std::string mFontFileExtension; }; extern WResourceManager resources; diff --git a/projects/mtg/src/WResourceManager.cpp b/projects/mtg/src/WResourceManager.cpp index 779811695..92b57919a 100644 --- a/projects/mtg/src/WResourceManager.cpp +++ b/projects/mtg/src/WResourceManager.cpp @@ -65,8 +65,8 @@ void WResourceManager::DebugRender() if (textureWCache.totalSize > textureWCache.cacheSize) man = textureWCache.totalSize - textureWCache.cacheSize; sprintf(buf, "Textures %u+%llu (of %u) items (%u misses), Pixels: %lu (of %lu) + %lu", textureWCache.cacheItems, - (long long unsigned int) textureWCache.managed.size(), textureWCache.maxCached, misses, - textureWCache.cacheSize, textureWCache.maxCacheSize, man); + (long long unsigned int) textureWCache.managed.size(), textureWCache.maxCached, misses, + textureWCache.cacheSize, textureWCache.maxCacheSize, man); font->DrawString(buf, 10, 5); #if defined (WIN32) || defined (LINUX) || defined (IOS) @@ -82,7 +82,7 @@ void WResourceManager::DebugRender() #ifdef DEBUG_CACHE if(debugMessage.size()) - font->DrawString(debugMessage.c_str(), SCREEN_WIDTH-10,SCREEN_HEIGHT-25,JGETEXT_RIGHT); + font->DrawString(debugMessage.c_str(), SCREEN_WIDTH-10,SCREEN_HEIGHT-25,JGETEXT_RIGHT); #endif } @@ -116,6 +116,7 @@ unsigned long WResourceManager::SizeManaged() return res; } + unsigned int WResourceManager::Count() { unsigned int count = 0; @@ -127,6 +128,7 @@ unsigned int WResourceManager::Count() count += psiWCache.managed.size(); return count; } + unsigned int WResourceManager::CountCached() { unsigned int count = 0; @@ -185,6 +187,7 @@ WResourceManager::WResourceManager() bThemedCards = false; } + WResourceManager::~WResourceManager() { LOG("==Destroying WResourceManager=="); @@ -333,13 +336,13 @@ JQuad * WResourceManager::GetQuad(int id) return result; } -JQuad * WResourceManager::RetrieveTempQuad(string filename, int submode) +JQuad * WResourceManager::RetrieveTempQuad(const string& filename, int submode) { return RetrieveQuad(filename, 0, 0, 0, 0, "temporary", RETRIEVE_NORMAL, submode); } -JQuad * WResourceManager::RetrieveQuad(string filename, float offX, float offY, float width, float height, string resname, - int style, int submode, int id) +JQuad * WResourceManager::RetrieveQuad(const string& filename, float offX, float offY, float width, float height, string resname, + int style, int submode, int id) { JQuad * jq = NULL; @@ -399,6 +402,7 @@ JQuad * WResourceManager::RetrieveQuad(string filename, float offX, float offY, //Texture doesn't exist, so no quad. return NULL; } + void WResourceManager::Release(JTexture * tex) { if (!tex) return; @@ -416,7 +420,7 @@ void WResourceManager::Release(JTexture * tex) { it->second->unlock(); //Release one lock. if (it->second->locks != WRES_UNLOCKED) //Normally we'd call isLocked, but this way ignores quads. - return; //Locked + return; //Locked } textureWCache.Delete(it->second); @@ -454,10 +458,8 @@ void WResourceManager::Release(JSample * sample) sampleWCache.Release(sample); } -JTexture * WResourceManager::RetrieveTexture(string filename, int style, int submode) +JTexture * WResourceManager::RetrieveTexture(const string& filename, int style, int submode) { - WCachedTexture * res = NULL; - //Aliases. if (style == RETRIEVE_THUMB) { @@ -465,7 +467,7 @@ JTexture * WResourceManager::RetrieveTexture(string filename, int style, int sub style = RETRIEVE_NORMAL; } - res = textureWCache.Retrieve(0, filename, style, submode); + WCachedTexture* res = textureWCache.Retrieve(0, filename, style, submode); lastError = textureWCache.mError; if (res) @@ -478,25 +480,25 @@ JTexture * WResourceManager::RetrieveTexture(string filename, int style, int sub { switch(textureWCache.mError) { - case CACHE_ERROR_NONE: + case CACHE_ERROR_NONE: debugMessage = "Not in cache: "; break; - case CACHE_ERROR_404: + case CACHE_ERROR_404: debugMessage = "File not found: "; break; - case CACHE_ERROR_BAD_ALLOC: + case CACHE_ERROR_BAD_ALLOC: debugMessage = "Out of memory: "; break; - case CACHE_ERROR_BAD: + case CACHE_ERROR_BAD: debugMessage = "Cache bad: "; break; - case CACHE_ERROR_NOT_MANAGED: + case CACHE_ERROR_NOT_MANAGED: debugMessage = "Resource not managed: "; break; - case CACHE_ERROR_LOST: + case CACHE_ERROR_LOST: debugMessage = "Resource went bad, potential memory leak: "; break; - default: + default: debugMessage = "Unspecified error: "; } debugMessage += filename; @@ -540,9 +542,8 @@ JTexture* WResourceManager::GetTexture(int id) return jtex; } -hgeParticleSystemInfo * WResourceManager::RetrievePSI(string filename, JQuad * texture, int style, int submode) +hgeParticleSystemInfo * WResourceManager::RetrievePSI(const string& filename, JQuad * texture, int style, int submode) { - if (!texture) return NULL; WCachedParticles * res = psiWCache.Retrieve(0, filename, style, submode); @@ -558,7 +559,7 @@ hgeParticleSystemInfo * WResourceManager::RetrievePSI(string filename, JQuad * t return NULL; } -JSample * WResourceManager::RetrieveSample(string filename, int style, int submode) +JSample * WResourceManager::RetrieveSample(const string& filename, int style, int submode) { WCachedSample * tc = NULL; tc = sampleWCache.Retrieve(0, filename, style, submode); @@ -574,7 +575,7 @@ JSample * WResourceManager::RetrieveSample(string filename, int style, int submo return NULL; } -string WResourceManager::graphicsFile(const string filename) +string WResourceManager::graphicsFile(const string& filename) { char buf[512]; @@ -598,16 +599,16 @@ string WResourceManager::graphicsFile(const string filename) if (fileOK(buf, true)) return buf; } /* - //FIXME Put back when we're using modes. - //Failure. Check mode graphics - string mode = options[Options::ACTIVE_MODE].str; + //FIXME Put back when we're using modes. + //Failure. Check mode graphics + string mode = options[Options::ACTIVE_MODE].str; - if(mode != "" && mode != "Default"){ - sprintf(buf,"modes/%s/graphics/%s",mode.c_str(),filename.c_str()); - if(fileOK(buf,true)) - return buf; - } - */ + if(mode != "" && mode != "Default"){ + sprintf(buf,"modes/%s/graphics/%s",mode.c_str(),filename.c_str()); + if(fileOK(buf,true)) + return buf; + } + */ //Failure. Check graphics char graphdir[512]; sprintf(graphdir, "graphics/%s", filename.c_str()); @@ -625,7 +626,7 @@ string WResourceManager::graphicsFile(const string filename) return graphdir; } -string WResourceManager::avatarFile(const string filename) +string WResourceManager::avatarFile(const string& filename) { char buf[512]; @@ -652,16 +653,16 @@ string WResourceManager::avatarFile(const string filename) if (fileOK(buf, true)) return buf; } /* - //FIXME Put back when we're using modes. - //Failure. Check mode graphics - string mode = options[Options::ACTIVE_MODE].str; + //FIXME Put back when we're using modes. + //Failure. Check mode graphics + string mode = options[Options::ACTIVE_MODE].str; - if(mode != "" && mode != "Default"){ - sprintf(buf,"modes/%s/graphics/%s",mode.c_str(),filename.c_str()); - if(fileOK(buf,true)) - return buf; - } - */ + if(mode != "" && mode != "Default"){ + sprintf(buf,"modes/%s/graphics/%s",mode.c_str(),filename.c_str()); + if(fileOK(buf,true)) + return buf; + } + */ //Failure. Check Baka sprintf(buf, "ai/baka/avatars/%s", filename.c_str()); @@ -679,7 +680,7 @@ string WResourceManager::avatarFile(const string filename) return ""; } -string WResourceManager::cardFile(const string filename) +string WResourceManager::cardFile(const string& filename) { char buf[512]; string::size_type i = 0; @@ -716,15 +717,15 @@ string WResourceManager::cardFile(const string filename) //FIXME Put back when we're using modes. /* - //Failure. Check mode - string mode = options[Options::ACTIVE_MODE].str; + //Failure. Check mode + string mode = options[Options::ACTIVE_MODE].str; - if(mode != "" && mode != "Default"){ - sprintf(buf,"modes/%s/sets/%s",mode.c_str(),filename.c_str()); - if(fileOK(buf,true)) - return buf; - } - */ + if(mode != "" && mode != "Default"){ + sprintf(buf,"modes/%s/sets/%s",mode.c_str(),filename.c_str()); + if(fileOK(buf,true)) + return buf; + } + */ //Failure. Assume it's in a zip file? if (!set.size()) { //Didn't fill "set" string, so do it now. @@ -752,7 +753,7 @@ string WResourceManager::cardFile(const string filename) return ""; } -string WResourceManager::musicFile(const string filename) +string WResourceManager::musicFile(const string& filename) { char buf[512]; @@ -766,15 +767,15 @@ string WResourceManager::musicFile(const string filename) } /* - //FIXME Put back when we're using modes. - //Failure. Check mode - string mode = options[Options::ACTIVE_MODE].str; + //FIXME Put back when we're using modes. + //Failure. Check mode + string mode = options[Options::ACTIVE_MODE].str; - if(mode != "" && mode != "Default"){ - sprintf(buf,"modes/%s/sound/%s",mode.c_str(),filename.c_str()); - if(fileOK(buf,true)) - return buf; - }*/ + if(mode != "" && mode != "Default"){ + sprintf(buf,"modes/%s/sound/%s",mode.c_str(),filename.c_str()); + if(fileOK(buf,true)) + return buf; + }*/ //Failure. Check sound char defdir[512]; @@ -789,7 +790,7 @@ string WResourceManager::musicFile(const string filename) return ""; } -string WResourceManager::sfxFile(const string filename) +string WResourceManager::sfxFile(const string& filename) { char buf[512]; @@ -803,15 +804,15 @@ string WResourceManager::sfxFile(const string filename) } /* - //FIXME: Put back when we're using modes. - //Failure. Check mode - string mode = options[Options::ACTIVE_MODE].str; - if(mode != "" && mode != "Default"){ - sprintf(buf,"modes/%s/sound/sfx/%s",mode.c_str(),filename.c_str()); - if(fileOK(buf,true)) - return buf; - } - */ + //FIXME: Put back when we're using modes. + //Failure. Check mode + string mode = options[Options::ACTIVE_MODE].str; + if(mode != "" && mode != "Default"){ + sprintf(buf,"modes/%s/sound/sfx/%s",mode.c_str(),filename.c_str()); + if(fileOK(buf,true)) + return buf; + } + */ //Failure. Check sound char defdir[512]; sprintf(defdir, "sound/sfx/%s", filename.c_str()); @@ -821,7 +822,7 @@ string WResourceManager::sfxFile(const string filename) return ""; } -int WResourceManager::dirOK(string dirname) +int WResourceManager::dirOK(const string& dirname) { char fname[512]; @@ -830,7 +831,7 @@ int WResourceManager::dirOK(string dirname) struct _stat statBuffer; return (_stat(fname, &statBuffer) >= 0 && // make sure it exists - statBuffer.st_mode & S_IFDIR); // and it's not a file + statBuffer.st_mode & S_IFDIR); // and it's not a file #else sprintf(fname, "%s", JGE_GET_RES(dirname).c_str()); struct stat st; @@ -839,7 +840,7 @@ int WResourceManager::dirOK(string dirname) return 0; } -int WResourceManager::fileOK(string filename, bool relative) +int WResourceManager::fileOK(const string& filename, bool relative) { std::ifstream * fp = NULL; if (relative) @@ -1068,10 +1069,10 @@ bool WCache::RemoveOldest() { typename map::iterator oldest = cache.end(); - for (typename map::iterator it = cache.begin(); it != cache.end(); it++) + for (typename map::iterator it = cache.begin(); it != cache.end(); ++it) { if (it->second && !it->second->isLocked() && (oldest == cache.end() || it->second->lastTime < oldest->second->lastTime)) oldest - = it; + = it; } if (oldest != cache.end() && oldest->second && !oldest->second->isLocked()) @@ -1117,7 +1118,7 @@ void WCache::Resize(unsigned long size, int items) } template -cacheItem* WCache::AttemptNew(string filename, int submode) +cacheItem* WCache::AttemptNew(const string& filename, int submode) { if (submode & CACHE_EXISTING) { //Should never get this far. @@ -1162,7 +1163,7 @@ cacheItem* WCache::AttemptNew(string filename, int submo } template -cacheItem * WCache::Retrieve(int id, string filename, int style, int submode) +cacheItem* WCache::Retrieve(int id, const string& filename, int style, int submode) { //Check cache. cacheItem * tc = NULL; @@ -1220,12 +1221,13 @@ cacheItem * WCache::Retrieve(int id, string filename, in //Record managed failure. Cache failure is recorded in Get(). if ((style == RETRIEVE_MANAGE || style == RETRIEVE_RESOURCE) && mError == CACHE_ERROR_404) managed[makeID(id, filename, submode)] - = NULL; + = NULL; return NULL; } + template -int WCache::makeID(int id, string filename, int submode) +int WCache::makeID(int id, const string& filename, int submode) { int mId = id; if (!mId) @@ -1250,7 +1252,7 @@ int WCache::makeID(int id, string filename, int submode) } template -cacheItem * WCache::Get(int id, string filename, int style, int submode) +cacheItem* WCache::Get(int id, const string& filename, int style, int submode) { typename map::iterator it; int lookup = makeID(id, filename, submode); @@ -1385,9 +1387,9 @@ bool WCache::Cleanup() while (cacheItems > MAX_CACHE_OBJECTS || cacheItems > maxCached || cacheSize > maxCacheSize #if defined WIN32 || defined LINUX || defined (IOS) #else - || ramAvailableLineareMax() < MIN_LINEAR_RAM + || ramAvailableLineareMax() < MIN_LINEAR_RAM #endif - ) + ) { if (!RemoveOldest()) { @@ -1505,7 +1507,7 @@ bool WCache::Delete(cacheItem * item) cacheSize -= isize; #ifdef DEBUG_CACHE if(cacheItems == 0) - DebugTrace("cacheItems out of sync."); + DebugTrace("cacheItems out of sync."); #endif cacheItems--;