summaryrefslogtreecommitdiff
path: root/cache.c
diff options
context:
space:
mode:
authorlordjaxom <lordjaxom>2004-12-14 20:05:40 +0000
committerlordjaxom <lordjaxom>2004-12-14 20:05:40 +0000
commitb8f29c674cc0ccca207123342c1344bbd0f13796 (patch)
tree2af468bf7acc6df510241c1090d7e6538b6b3cf1 /cache.c
parent3b0999969632e2820b846ca8adcef6b346ff7441 (diff)
downloadvdr-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.c69
1 files changed, 43 insertions, 26 deletions
diff --git a/cache.c b/cache.c
index 6c3f99a..0c2cfaf 100644
--- a/cache.c
+++ b/cache.c
@@ -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;
}