From daf52a2610b2dbe84c00bd4b5628fb03f2fde5b5 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sun, 8 Sep 2019 14:00:08 +0800 Subject: [PATCH] Avoid double lookups --- src/base/settingsstorage.cpp | 15 ++++++++------- src/base/settingvalue.h | 3 +++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/base/settingsstorage.cpp b/src/base/settingsstorage.cpp index e87f5562c..5ee51c266 100644 --- a/src/base/settingsstorage.cpp +++ b/src/base/settingsstorage.cpp @@ -202,17 +202,19 @@ bool SettingsStorage::save() QVariant SettingsStorage::loadValue(const QString &key, const QVariant &defaultValue) const { - QReadLocker locker(&m_lock); + const QReadLocker locker(&m_lock); return m_data.value(mapKey(key), defaultValue); } void SettingsStorage::storeValue(const QString &key, const QVariant &value) { const QString realKey = mapKey(key); - QWriteLocker locker(&m_lock); - if (m_data.value(realKey) != value) { + const QWriteLocker locker(&m_lock); + + QVariant ¤tValue = m_data[realKey]; + if (currentValue != value) { m_dirty = true; - m_data.insert(realKey, value); + currentValue = value; m_timer.start(); } } @@ -220,10 +222,9 @@ void SettingsStorage::storeValue(const QString &key, const QVariant &value) void SettingsStorage::removeValue(const QString &key) { const QString realKey = mapKey(key); - QWriteLocker locker(&m_lock); - if (m_data.contains(realKey)) { + const QWriteLocker locker(&m_lock); + if (m_data.remove(realKey) > 0) { m_dirty = true; - m_data.remove(realKey); m_timer.start(); } } diff --git a/src/base/settingvalue.h b/src/base/settingvalue.h index 64998e2d4..ad863e10a 100644 --- a/src/base/settingvalue.h +++ b/src/base/settingvalue.h @@ -68,6 +68,9 @@ public: CachedSettingValue &operator=(const T &newValue) { + if (m_value == newValue) + return *this; + m_value = newValue; storeValue(m_value); return *this;