Skip to content

Commit da64d1a

Browse files
committed
Adding ability to use a custom comparator
1 parent c9d9892 commit da64d1a

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/ESPressio_ThreadSafe.hpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@ namespace ESPressio {
4747
T _value;
4848
std::mutex _mutex;
4949
std::function<void(T,T)> _onChange = nullptr;
50+
std::function<bool(T,T)> _onCompare = [&](T a, T b) -> bool { return a == b; };
5051
public:
5152
// Constructor/Destructor
52-
Mutex(T value, std::function<void(T,T)> onChange = nullptr) : _value(value), _onChange((onChange)) { }
53+
Mutex(T value, std::function<void(T,T)> onChange = nullptr, std::function<bool(T,T)> onCompare = nullptr) : _value(value), _onChange((onChange)) {
54+
if (onCompare) != nullptr { _onCompare = onCompare; }
55+
}
5356
// Methods
5457
T Get() {
5558
std::lock_guard<std::mutex> lock(_mutex);
@@ -75,7 +78,7 @@ namespace ESPressio {
7578
void Set(T value) {
7679
std::lock_guard<std::mutex> lock(_mutex);
7780
T oldValue = _value;
78-
if (oldValue == value) { return; }
81+
if (_onCompare(oldValue, value)) { return; }
7982
_value = value;
8083
if (_onChange != nullptr) { (_onChange)(oldValue, value); }
8184
}
@@ -148,9 +151,12 @@ namespace ESPressio {
148151
T _value;
149152
std::shared_mutex _mutex;
150153
std::function<void(T,T)> _onChange = nullptr;
154+
std::function<bool(T,T)> _onCompare = [&](T a, T b) -> bool { return a == b; };
151155
public:
152156
// Constructor/Destructor
153-
ReadWriteMutex(T value, std::function<void(T,T)> onChange = nullptr) : _value(value), _onChange((onChange)) { }
157+
ReadWriteMutex(T value, std::function<void(T,T)> onChange = nullptr, std::function<bool(T,T)> onCompare = nullptr) : _value(value), _onChange((onChange)) {
158+
if (onCompare) != nullptr { _onCompare = onCompare; }
159+
}
154160
// Methods
155161
T Get() {
156162
std::shared_lock<std::shared_mutex> lock(_mutex);
@@ -176,7 +182,7 @@ namespace ESPressio {
176182
void Set(T value) {
177183
std::unique_lock<std::shared_mutex> lock(_mutex);
178184
T oldValue = _value;
179-
if (oldValue == value) { return; }
185+
if (_onCompare(oldValue, value)) { return; }
180186
_value = value;
181187
if (_onChange != nullptr) { (_onChange)(oldValue, value); }
182188
}

0 commit comments

Comments
 (0)