From a1d785ae12b3ec04b43e243f3397bb6f8ecf60d5 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Thu, 7 Aug 2008 19:08:04 +0200 Subject: [PATCH] introducing autocached settings --- src/common/settings.cpp | 37 +++++++++++++++++++------------ src/common/settings.h | 48 ++++++++++++++++++++--------------------- 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/src/common/settings.cpp b/src/common/settings.cpp index d6ebb806..eb4fc72a 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -29,6 +29,8 @@ #include "settings.h" +static QHash > __settingsCache__; + Settings::Settings(QString g, QString applicationName) #ifdef Q_WS_MAC @@ -59,15 +61,6 @@ Settings::Settings(QString g, QString applicationName) */ } -Settings::~Settings() { - -} - -void Settings::setGroup(QString g) { - group = g; - -} - QStringList Settings::allLocalKeys() { beginGroup(group); QStringList res = allKeys(); @@ -98,14 +91,17 @@ QStringList Settings::localChildGroups(const QString &rootkey) { void Settings::setLocalValue(const QString &key, const QVariant &data) { beginGroup(group); setValue(key, data); + setCacheValue(group, key, data); endGroup(); } -QVariant Settings::localValue(const QString &key, const QVariant &def) { - beginGroup(group); - QVariant res = value(key, def); - endGroup(); - return res; +const QVariant &Settings::localValue(const QString &key, const QVariant &def) { + if(!isCached(group, key)) { + beginGroup(group); + setCacheValue(group, key, value(key, def)); + endGroup(); + } + return cacheValue(group, key); } void Settings::removeLocalKey(const QString &key) { @@ -113,3 +109,16 @@ void Settings::removeLocalKey(const QString &key) { remove(key); endGroup(); } + + +void Settings::setCacheValue(const QString &group, const QString &key, const QVariant &data) { + ::__settingsCache__[group][key] = data; +} + +const QVariant &Settings::cacheValue(const QString &group, const QString &key) { + return ::__settingsCache__[group][key]; +} + +bool Settings::isCached(const QString &group, const QString &key) { + return ::__settingsCache__.contains(group) && ::__settingsCache__[group].contains(key); +} diff --git a/src/common/settings.h b/src/common/settings.h index 9ad960dd..1816a61b 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -26,31 +26,29 @@ #include class Settings : private QSettings { - - public: - virtual ~Settings(); - - //static void setGuiValue(QString, QVariant) {}; - //static QVariant guiValue(QString, QVariant = QVariant()) { return QVariant(); } - - enum Mode { Default, Custom }; - - protected: - Settings(QString group, QString applicationName); - - void setGroup(QString group); - - virtual QStringList allLocalKeys(); - virtual QStringList localChildKeys(const QString &rootkey = QString()); - virtual QStringList localChildGroups(const QString &rootkey = QString()); - - virtual void setLocalValue(const QString &key, const QVariant &data); - virtual QVariant localValue(const QString &key, const QVariant &def = QVariant()); - - virtual void removeLocalKey(const QString &key); - - QString group; - +public: + enum Mode { Default, Custom }; + +protected: + Settings(QString group, QString applicationName); + + inline void setGroup(const QString &group_) { group = group_; } + + virtual QStringList allLocalKeys(); + virtual QStringList localChildKeys(const QString &rootkey = QString()); + virtual QStringList localChildGroups(const QString &rootkey = QString()); + + virtual void setLocalValue(const QString &key, const QVariant &data); + virtual const QVariant &localValue(const QString &key, const QVariant &def = QVariant()); + + virtual void removeLocalKey(const QString &key); + + QString group; + +private: + void setCacheValue(const QString &group, const QString &key, const QVariant &data); + const QVariant &cacheValue(const QString &group, const QString &key); + bool isCached(const QString &group, const QString &key); }; -- 2.20.1