11 #ifndef NOM_SUPPORT_COMMON_H 12 #define NOM_SUPPORT_COMMON_H 23 const T &data()
const {
return Data; }
24 T *mutableData() {
return &Data; }
25 void resetData(T &&data) { Data = std::move(data); }
36 using Callback = std::function<void(T*)>;
39 Callback* registerDestructorCallback(Callback fn) {
40 DtorCallbacks.emplace_back(fn);
41 return &DtorCallbacks.back();
44 Callback* registerNotificationCallback(Callback fn) {
45 NotifCallbacks.emplace_back(fn);
46 return &NotifCallbacks.back();
49 void deleteCallback(std::list<Callback>& callbackList, Callback* toDelete) {
50 for (
auto i = callbackList.begin(); i != callbackList.end(); ++i) {
51 if (&*i == toDelete) {
52 callbackList.erase(i);
58 void deleteDestructorCallback(Callback* c) {
59 deleteCallback(DtorCallbacks, c);
62 void deleteNotificationCallback(Callback* c) {
63 deleteCallback(NotifCallbacks, c);
71 for (
auto callback : NotifCallbacks) {
72 callback(reinterpret_cast<T*>(
this));
77 for (
auto callback : DtorCallbacks) {
78 callback(reinterpret_cast<T*>(
this));
83 std::list<Callback> DtorCallbacks;
84 std::list<Callback> NotifCallbacks;
This class enables a listener pattern.
void notify()
Notifies all listeners (registerNotificationCallback users) of an update.