introducing autocached settings
[quassel.git] / src / common / settings.cpp
index d6ebb80..eb4fc72 100644 (file)
@@ -29,6 +29,8 @@
 
 #include "settings.h"
 
 
 #include "settings.h"
 
+static QHash<QString, QHash<QString, QVariant> > __settingsCache__;
+
 Settings::Settings(QString g, QString applicationName)
 
 #ifdef Q_WS_MAC
 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();
 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);
 void Settings::setLocalValue(const QString &key, const QVariant &data) {
   beginGroup(group);
   setValue(key, data);
+  setCacheValue(group, key, data);
   endGroup();
 }
 
   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) {
 }
 
 void Settings::removeLocalKey(const QString &key) {
@@ -113,3 +109,16 @@ void Settings::removeLocalKey(const QString &key) {
   remove(key);
   endGroup();
 }
   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);
+}