summaryrefslogtreecommitdiff
path: root/cache.c
diff options
context:
space:
mode:
authorlordjaxom <lordjaxom>2004-06-18 16:41:02 +0000
committerlordjaxom <lordjaxom>2004-06-18 16:41:02 +0000
commitde602ae6486b181ec081749a510cfcf15c71c817 (patch)
treea6b7efe2b4ad29d6c88b588e8a9b0d7bbeff7c08 /cache.c
parent1d3cd38e88ae97dd6906f9818d52b9ef07bf057d (diff)
downloadvdr-plugin-text2skin-de602ae6486b181ec081749a510cfcf15c71c817.tar.gz
vdr-plugin-text2skin-de602ae6486b181ec081749a510cfcf15c71c817.tar.bz2
- reimplemented image cache (fixes segfaults and speeds up image loading)v0.0.6
- fixed a recursion wenn de-initializing ImageMagick (crashes on exit) - reverted the changes in ImageMagick-loader that concerned palettes (obviously some versions of ImageMagick are BROKEN!!! I am using 5.5.7 which works fine. Version 5.4.7 shows random errors) - reimplemented "Flush image cache" into the setup menu - included -lMagick into Makefile as a workaround for Debian (and others possibly) - fixed display of scrollbar
Diffstat (limited to 'cache.c')
-rw-r--r--cache.c53
1 files changed, 52 insertions, 1 deletions
diff --git a/cache.c b/cache.c
index 1182e9e..6c3f99a 100644
--- a/cache.c
+++ b/cache.c
@@ -1,6 +1,57 @@
/*
- * $Id: cache.c,v 1.1 2004/06/05 01:40:13 lordjaxom Exp $
+ * $Id: cache.c,v 1.2 2004/06/18 16:08:11 lordjaxom Exp $
*/
#include "cache.h"
+#include "bitmap.h"
+
+cText2SkinCache::cText2SkinCache(int MaxItems) {
+ mMaxItems = MaxItems;
+}
+
+cText2SkinCache::~cText2SkinCache() {
+ Flush();
+}
+
+void cText2SkinCache::Delete(const key_type &Key, data_type &Data) {
+ delete Data;
+}
+
+void cText2SkinCache::Flush(void) {
+ mUsage.clear();
+ item_iterator it = mItems.begin();
+ for (; it != mItems.end(); ++it)
+ Delete((*it).first, (*it).second);
+ mItems.clear();
+}
+
+void cText2SkinCache::Reset(void) {
+ item_iterator it = mItems.begin();
+ for (; it != mItems.end(); ++it)
+ (*it).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) {
+ usage_iterator ut = mUsage.begin();
+ Delete(*ut, mItems[*ut]);
+ mItems.erase(*ut);
+ mUsage.erase(mUsage.begin());
+ }
+ it = mItems.insert(item_map::value_type(Key, data_type())).first;
+ mUsage.push_back(Key);
+ }
+ return (*it).second;
+}