diff options
Diffstat (limited to 'src/sq_pixmapcache.h')
-rw-r--r-- | src/sq_pixmapcache.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/sq_pixmapcache.h b/src/sq_pixmapcache.h new file mode 100644 index 0000000..3572715 --- /dev/null +++ b/src/sq_pixmapcache.h @@ -0,0 +1,133 @@ +/*************************************************************************** + sq_pixmapcache.h - description + ------------------- + begin : Sep 28 2004 + copyright : (C) 2004 by Baryshev Dmitry + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef SQ_PIXMAPCACHE_H +#define SQ_PIXMAPCACHE_H + +#include <tqmap.h> +#include <tqobject.h> + +#include <kurl.h> + +#include "sq_thumbnailinfo.h" + +class SQ_DirThumbs; + +/* + * SQ_PixmapCache represents a simple memory cache, which + * stores pixmaps. It doesn't use neither TQPixmapCache nor TQCache. + * + * Uses SQ_Dir(Thumbnails) to store thumbnails on disk. + */ + +class SQ_PixmapCache : public TQObject, public TQMap<KURL, SQ_Thumbnail> +{ + public: + SQ_PixmapCache(TQObject *parent, int limit = 20*1024); + ~SQ_PixmapCache(); + + /* + * Get maximum cache limit. + */ + int cacheLimit(); + + /* + * Set cache limit, in kilobytes. + * + * 200 means ~200 Kb, 1024 - 1Mb + */ + void setCacheLimit(int); + + /* + * Write all entries to disk and clear cache. + */ + void sync(); + + /* + * Write one entry to disk and remove it from cache. + */ + void syncEntry(const KURL &key, SQ_Thumbnail &thumb); + + /* + * Insert new entry to cache + */ + void insert(const KURL &key, const SQ_Thumbnail &thumb); + + /* + * Check if pixmap, represented by 'key', is already in cache. + */ + bool contains2(const KURL &key, SQ_Thumbnail &th); + + /* + * Calculate total size used by cache (not exact!) + */ + int totalSize(); + + /* + * Is cache full ? + */ + bool full(); + + /* + * Clear cache. + */ + void clear(); + + /* + * Remove entry from cache. + */ + void removeEntry(const KURL &key); + + /* + * Remove entry from cache and from disk. + */ + void removeEntryFull(const KURL &key); + + static SQ_PixmapCache* instance() { return m_instance; } + + private: + int entrySize(const SQ_Thumbnail &th) const; + + private: + int cache_limit; + int last_full; + bool valid_full; + SQ_DirThumbs *dir; + + static SQ_PixmapCache *m_instance; +}; + +inline +int SQ_PixmapCache::cacheLimit() +{ + return cache_limit; +} + +inline +void SQ_PixmapCache::setCacheLimit(int n) +{ + cache_limit = n << 10; +} + +inline +bool SQ_PixmapCache::full() +{ + // when 'cache_limit' is 0, pixmap cache is always full + return cache_limit ? (cache_limit <= totalSize()) : true; +} + +#endif |