Skip to content

Commit 33b874f

Browse files
committedJun 11, 2016
Settings: Clean up settings changed callback code
1 parent 817fea6 commit 33b874f

File tree

2 files changed

+44
-32
lines changed

2 files changed

+44
-32
lines changed
 

‎src/settings.cpp

+22-23
Original file line numberDiff line numberDiff line change
@@ -985,39 +985,38 @@ void Settings::clearDefaultsNoLock()
985985
}
986986

987987

988-
void Settings::registerChangedCallback(std::string name,
989-
setting_changed_callback cbf, void *userdata)
988+
void Settings::registerChangedCallback(const std::string &name,
989+
SettingsChangedCallback cbf, void *userdata)
990990
{
991-
MutexAutoLock lock(m_callbackMutex);
991+
MutexAutoLock lock(m_callback_mutex);
992992
m_callbacks[name].push_back(std::make_pair(cbf, userdata));
993993
}
994994

995-
void Settings::deregisterChangedCallback(std::string name, setting_changed_callback cbf, void *userdata)
995+
void Settings::deregisterChangedCallback(const std::string &name,
996+
SettingsChangedCallback cbf, void *userdata)
996997
{
997-
MutexAutoLock lock(m_callbackMutex);
998-
std::map<std::string, std::vector<std::pair<setting_changed_callback, void*> > >::iterator iterToVector = m_callbacks.find(name);
999-
if (iterToVector != m_callbacks.end())
1000-
{
1001-
std::vector<std::pair<setting_changed_callback, void*> > &vector = iterToVector->second;
998+
MutexAutoLock lock(m_callback_mutex);
999+
SettingsCallbackMap::iterator it_cbks = m_callbacks.find(name);
1000+
1001+
if (it_cbks != m_callbacks.end()) {
1002+
SettingsCallbackList &cbks = it_cbks->second;
10021003

1003-
std::vector<std::pair<setting_changed_callback, void*> >::iterator position =
1004-
std::find(vector.begin(), vector.end(), std::make_pair(cbf, userdata));
1004+
SettingsCallbackList::iterator position =
1005+
std::find(cbks.begin(), cbks.end(), std::make_pair(cbf, userdata));
10051006

1006-
if (position != vector.end())
1007-
vector.erase(position);
1007+
if (position != cbks.end())
1008+
cbks.erase(position);
10081009
}
10091010
}
10101011

1011-
void Settings::doCallbacks(const std::string name)
1012+
void Settings::doCallbacks(const std::string &name) const
10121013
{
1013-
MutexAutoLock lock(m_callbackMutex);
1014-
std::map<std::string, std::vector<std::pair<setting_changed_callback, void*> > >::iterator iterToVector = m_callbacks.find(name);
1015-
if (iterToVector != m_callbacks.end())
1016-
{
1017-
std::vector<std::pair<setting_changed_callback, void*> >::iterator iter;
1018-
for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); ++iter)
1019-
{
1020-
(iter->first)(name, iter->second);
1021-
}
1014+
MutexAutoLock lock(m_callback_mutex);
1015+
1016+
SettingsCallbackMap::const_iterator it_cbks = m_callbacks.find(name);
1017+
if (it_cbks != m_callbacks.end()) {
1018+
SettingsCallbackList::const_iterator it;
1019+
for (it = it_cbks->second.begin(); it != it_cbks->second.end(); ++it)
1020+
(it->first)(name, it->second);
10221021
}
10231022
}

‎src/settings.h

+22-9
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,17 @@ struct NoiseParams;
3535
extern Settings *g_settings;
3636
extern std::string g_settings_path;
3737

38-
/** function type to register a changed callback */
39-
typedef void (*setting_changed_callback)(const std::string &name, void *data);
38+
// Type for a settings changed callback function
39+
typedef void (*SettingsChangedCallback)(const std::string &name, void *data);
40+
41+
typedef std::vector<
42+
std::pair<
43+
SettingsChangedCallback,
44+
void *
45+
>
46+
> SettingsCallbackList;
47+
48+
typedef std::map<std::string, SettingsCallbackList> SettingsCallbackMap;
4049

4150
enum ValueType {
4251
VALUETYPE_STRING,
@@ -209,24 +218,28 @@ class Settings {
209218
void clearDefaults();
210219
void updateValue(const Settings &other, const std::string &name);
211220
void update(const Settings &other);
212-
void registerChangedCallback(std::string name, setting_changed_callback cbf, void *userdata = NULL);
213-
void deregisterChangedCallback(std::string name, setting_changed_callback cbf, void *userdata = NULL);
214221

215-
private:
222+
void registerChangedCallback(const std::string &name,
223+
SettingsChangedCallback cbf, void *userdata = NULL);
224+
void deregisterChangedCallback(const std::string &name,
225+
SettingsChangedCallback cbf, void *userdata = NULL);
216226

227+
private:
217228
void updateNoLock(const Settings &other);
218229
void clearNoLock();
219230
void clearDefaultsNoLock();
220231

221-
void doCallbacks(std::string name);
232+
void doCallbacks(const std::string &name) const;
222233

223234
std::map<std::string, SettingsEntry> m_settings;
224235
std::map<std::string, SettingsEntry> m_defaults;
225236

226-
std::map<std::string, std::vector<std::pair<setting_changed_callback,void*> > > m_callbacks;
237+
SettingsCallbackMap m_callbacks;
238+
239+
mutable Mutex m_callback_mutex;
227240

228-
mutable Mutex m_callbackMutex;
229-
mutable Mutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this.
241+
// All methods that access m_settings/m_defaults directly should lock this.
242+
mutable Mutex m_mutex;
230243

231244
};
232245

0 commit comments

Comments
 (0)
Please sign in to comment.