summaryrefslogtreecommitdiff
path: root/src/lib/change_signaller.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-11-03 09:07:27 +0100
committerCarl Hetherington <cth@carlh.net>2025-11-03 09:07:27 +0100
commit961754d68b85324091e29d8e8eb19c4fdf32abe6 (patch)
tree8dc76d59ec82c7886b5cab82d2ea6a31af9d608e /src/lib/change_signaller.h
parentaf517d2d2a0a02ea167ffac4c617845727984720 (diff)
wip: hacksprocessor
Diffstat (limited to 'src/lib/change_signaller.h')
-rw-r--r--src/lib/change_signaller.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/lib/change_signaller.h b/src/lib/change_signaller.h
index 094716598..d3e3958d4 100644
--- a/src/lib/change_signaller.h
+++ b/src/lib/change_signaller.h
@@ -27,6 +27,16 @@
#include <vector>
+class ChangeID
+{
+public:
+ static int next();
+
+private:
+ static boost::atomic<int> _next;
+};
+
+
enum class ChangeType
{
PENDING,
@@ -39,15 +49,17 @@ template <class T, class P>
class ChangeSignal
{
public:
- ChangeSignal(T* thing_, P property_, ChangeType type_)
+ ChangeSignal(T* thing_, P property_, ChangeType type_, int id_)
: thing(thing_)
, property(property_)
, type(type_)
+ , id(id_)
{}
T* thing;
P property;
ChangeType type;
+ int id;
};
@@ -80,7 +92,7 @@ public:
_pending.push_back(signal);
}
} else {
- signal.thing->signal_change(signal.type, signal.property);
+ signal.thing->signal_change(signal.type, signal.property, signal.id);
}
}
@@ -99,7 +111,7 @@ public:
lm.unlock();
for (auto signal: pending) {
- signal.thing->signal_change(signal.type, signal.property);
+ signal.thing->signal_change(signal.type, signal.property, signal.id);
}
}
@@ -129,13 +141,14 @@ public:
: _thing(t)
, _property(p)
, _done(true)
+ , _id(ChangeID::next())
{
- ChangeSignalDespatcher<T, P>::instance()->signal_change({_thing, _property, ChangeType::PENDING});
+ ChangeSignalDespatcher<T, P>::instance()->signal_change({_thing, _property, ChangeType::PENDING, _id});
}
~ChangeSignaller ()
{
- ChangeSignalDespatcher<T, P>::instance()->signal_change({_thing, _property, _done ? ChangeType::DONE : ChangeType::CANCELLED});
+ ChangeSignalDespatcher<T, P>::instance()->signal_change({_thing, _property, _done ? ChangeType::DONE : ChangeType::CANCELLED, _id});
}
void abort ()
@@ -147,6 +160,7 @@ private:
T* _thing;
P _property;
bool _done;
+ int _id;
};