diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-11-03 09:07:27 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-11-03 09:07:27 +0100 |
| commit | 961754d68b85324091e29d8e8eb19c4fdf32abe6 (patch) | |
| tree | 8dc76d59ec82c7886b5cab82d2ea6a31af9d608e /src/lib/change_signaller.h | |
| parent | af517d2d2a0a02ea167ffac4c617845727984720 (diff) | |
wip: hacksprocessor
Diffstat (limited to 'src/lib/change_signaller.h')
| -rw-r--r-- | src/lib/change_signaller.h | 24 |
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; }; |
