Enable customizing the save statistics time interval
[qBittorrent.git] / src / base / settingvalue.h
blob9f9b7bbaeeebb5f2b302a7aef334bf85ede5fe0a
1 /*
2 * Bittorrent Client using Qt and libtorrent.
3 * Copyright (C) 2016 Vladimir Golovnev <glassez@yandex.ru>
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 * In addition, as a special exception, the copyright holders give permission to
20 * link this program with the OpenSSL project's "OpenSSL" library (or with
21 * modified versions of it that use the same license as the "OpenSSL" library),
22 * and distribute the linked executables. You must obey the GNU General Public
23 * License in all respects for all of the code used other than "OpenSSL". If you
24 * modify file(s), you may extend this exception to your version of the file(s),
25 * but you are not obligated to do so. If you do not wish to do so, delete this
26 * exception statement from your version.
29 #pragma once
31 #include <QString>
33 #include "settingsstorage.h"
35 // This is a thin/handy wrapper over `SettingsStorage`. Use it when store/load value
36 // rarely occurs, otherwise use `CachedSettingValue`.
37 template <typename T>
38 class SettingValue
40 public:
41 explicit SettingValue(const QString &keyName)
42 : m_keyName {keyName}
46 T get(const T &defaultValue = {}) const
48 return SettingsStorage::instance()->loadValue(m_keyName, defaultValue);
51 operator T() const
53 return get();
56 SettingValue<T> &operator=(const T &value)
58 SettingsStorage::instance()->storeValue(m_keyName, value);
59 return *this;
62 private:
63 const QString m_keyName;
66 template <typename T>
67 class CachedSettingValue
69 public:
70 explicit CachedSettingValue(const QString &keyName, const T &defaultValue = {})
71 : m_setting {keyName}
72 , m_cache {m_setting.get(defaultValue)}
76 // The signature of the ProxyFunc should be equivalent to the following:
77 // T proxyFunc(const T &a);
78 template <typename ProxyFunc>
79 explicit CachedSettingValue(const QString &keyName, const T &defaultValue, ProxyFunc &&proxyFunc)
80 : m_setting {keyName}
81 , m_cache {proxyFunc(m_setting.get(defaultValue))}
85 T get() const
87 return m_cache;
90 operator T() const
92 return get();
95 CachedSettingValue<T> &operator=(const T &value)
97 if (m_cache == value)
98 return *this;
100 m_setting = value;
101 m_cache = value;
102 return *this;
105 private:
106 SettingValue<T> m_setting;
107 T m_cache;