summaryrefslogtreecommitdiff
path: root/library
Side-by-side diff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/config.cpp1
1 files changed, 0 insertions, 1 deletions
diff --git a/library/config.cpp b/library/config.cpp
index e9cae4c..72bd4d2 100644
--- a/library/config.cpp
+++ b/library/config.cpp
@@ -102,97 +102,96 @@ protected:
private:
ConfigCache();
void remove( const QString& fileName );
void removeLru();
private:
QMap<QString, ConfigData> m_cached;
unsigned int m_totalSize;
int m_tid;
private:
static ConfigCache* m_inst;
static const unsigned int CONFIG_CACHE_SIZE = 8192;
static const unsigned int CONFIG_CACHE_TIMEOUT = 1000;
};
ConfigCache* ConfigCache::m_inst = 0;
/*
* get destroyed when qApp gets destroyed
*/
ConfigCache::ConfigCache() : QObject( qApp ), m_totalSize( 0 ), m_tid( 0 ) {}
ConfigCache* ConfigCache::instance() {
if ( !m_inst )
m_inst = new ConfigCache();
return m_inst;
}
void ConfigCache::remove( const QString& fileName ) {
QMap<QString, ConfigData>::Iterator it = m_cached.find( fileName );
if ( it == m_cached.end() )
return;
m_totalSize -= (*it).size;
m_cached.remove( it );
}
void ConfigCache::removeLru() {
QMap<QString, ConfigData>::Iterator it = m_cached.begin();
QMap<QString, ConfigData>::Iterator lru = it;
++it;
for (; it != m_cached.end(); ++it)
if ((*it).used.tv_sec < (*lru).used.tv_sec ||
((*it).used.tv_sec == (*lru).used.tv_sec &&
(*it).used.tv_usec < (*lru).used.tv_usec))
lru = it;
- qWarning( "Removing item" );
m_totalSize -= (*lru).size;
m_cached.remove(lru);
}
void ConfigCache::timerEvent( QTimerEvent* ) {
while ( m_totalSize > CONFIG_CACHE_SIZE )
removeLru();
killTimer(m_tid);
m_tid = 0;
}
void ConfigCache::insert( const QString& fileName, const ConfigGroupMap& cfg,
const ConfigPrivate* _priv ) {
struct stat sbuf;
::stat( QFile::encodeName(fileName), &sbuf );
if ( static_cast<unsigned int>(sbuf.st_size) >= CONFIG_CACHE_SIZE>>1)
return;
/*
* remove the old version and use the new one
*/
ConfigPrivate priv = _priv ? *_priv : ConfigPrivate();
ConfigData data( cfg, priv, sbuf );
m_totalSize += data.size;
remove( fileName );
m_cached.insert( fileName, data );
/*
* we've overcommited allocation, let us clean up
* soon
*/
if ( m_totalSize >= CONFIG_CACHE_SIZE )
if ( !m_tid )
m_tid = startTimer(CONFIG_CACHE_TIMEOUT);
}
bool ConfigCache::find( const QString& fileName, ConfigGroupMap& cfg,
ConfigPrivate **ppriv ) {
QMap<QString, ConfigData>::Iterator it = m_cached.find(fileName);
if (it != m_cached.end()) {
ConfigData &data = *it;
struct stat sbuf;
::stat(QFile::encodeName( fileName ), &sbuf);