diff options
author | lordjaxom <lordjaxom> | 2004-12-14 20:05:40 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2004-12-14 20:05:40 +0000 |
commit | b8f29c674cc0ccca207123342c1344bbd0f13796 (patch) | |
tree | 2af468bf7acc6df510241c1090d7e6538b6b3cf1 /cache.c | |
parent | 3b0999969632e2820b846ca8adcef6b346ff7441 (diff) | |
download | vdr-plugin-text2skin-b8f29c674cc0ccca207123342c1344bbd0f13796.tar.gz vdr-plugin-text2skin-b8f29c674cc0ccca207123342c1344bbd0f13796.tar.bz2 |
1.0-pre4v1.0-pre4
Diffstat (limited to 'cache.c')
-rw-r--r-- | cache.c | 69 |
1 files changed, 43 insertions, 26 deletions
@@ -1,5 +1,5 @@ /* - * $Id: cache.c,v 1.2 2004/06/18 16:08:11 lordjaxom Exp $ + * $Id: cache.c,v 1.4 2004/12/14 20:02:31 lordjaxom Exp $ */ #include "cache.h" @@ -19,39 +19,56 @@ void cText2SkinCache::Delete(const key_type &Key, data_type &Data) { void cText2SkinCache::Flush(void) { mUsage.clear(); - item_iterator it = mItems.begin(); - for (; it != mItems.end(); ++it) - Delete((*it).first, (*it).second); - mItems.clear(); + name_iterator it = mNames.begin(); + for (; it != mNames.end(); ++it) { + item_iterator it2 = (*it).second.begin(); + for (; it2 != (*it).second.end(); ++it2) + Delete((*it2).first, (*it2).second); + (*it).second.clear(); + } + mNames.clear(); } void cText2SkinCache::Reset(void) { - item_iterator it = mItems.begin(); - for (; it != mItems.end(); ++it) - (*it).second->Reset(); + name_iterator it = mNames.begin(); + for (; it != mNames.end(); ++it) { + item_iterator it2 = (*it).second.begin(); + for (; it2 != (*it).second.end(); ++it2) + (*it2).second->Reset(); + } } cText2SkinCache::data_type &cText2SkinCache::operator[](const key_type &Key) { - item_iterator it = mItems.find(Key); - if (it != mItems.end()) { - usage_iterator ut = mUsage.begin(); - for (; ut != mUsage.end(); ++ut) { - if ((*ut) == Key) { - mUsage.erase(ut); - break; - } - } - mUsage.push_back(Key); - } else { - if ((int)mItems.size() == mMaxItems) { + name_iterator it = mNames.find(Key.Filename); + if (it != mNames.end()) { + item_iterator it2 = (*it).second.find(Key); + if (it2 != (*it).second.end()) { usage_iterator ut = mUsage.begin(); - Delete(*ut, mItems[*ut]); - mItems.erase(*ut); - mUsage.erase(mUsage.begin()); + for (; ut != mUsage.end(); ++ut) { + if ((*ut) == Key) { + mUsage.erase(ut); + break; + } + } + mUsage.push_back(Key); + return (*it2).second; } - it = mItems.insert(item_map::value_type(Key, data_type())).first; - mUsage.push_back(Key); } - return (*it).second; + + if (it == mNames.end()) + it = mNames.insert(name_map::value_type(Key.Filename, item_map())).first; + + if ((int)mUsage.size() == mMaxItems) { + usage_iterator ut = mUsage.begin(); + Delete(*ut, (*it).second[*ut]); + (*it).second.erase(*ut); + if ((*it).second.size() == 0) + mNames.erase((*ut).Filename); + mUsage.erase(mUsage.begin()); + } + + item_iterator it2 = (*it).second.insert(item_map::value_type(Key, data_type())).first; + mUsage.push_back(Key); + return (*it2).second; } |