introducing autocached settings
authorMarcus Eggenberger <egs@quassel-irc.org>
Thu, 7 Aug 2008 17:08:04 +0000 (19:08 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Thu, 7 Aug 2008 17:08:04 +0000 (19:08 +0200)
src/common/settings.cpp
src/common/settings.h

index d6ebb80..eb4fc72 100644 (file)
@@ -29,6 +29,8 @@
 
 #include "settings.h"
 
+static QHash<QString, QHash<QString, QVariant> > __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);
+}
index 9ad960d..1816a61 100644 (file)
 #include <QSettings>
 
 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);
 };