From 5145c5894cc5d655a98ba6265dfd3e570a25aff1 Mon Sep 17 00:00:00 2001 From: cyborg1811m Date: Sun, 28 Jan 2024 07:58:54 +0100 Subject: [PATCH] added delete callback to const_list_node --- include/const_list.h | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/include/const_list.h b/include/const_list.h index 55f45f9..e0c8819 100644 --- a/include/const_list.h +++ b/include/const_list.h @@ -6,6 +6,7 @@ #define UDIFF_CONST_LIST_H_ #include +#include #include #include @@ -212,11 +213,18 @@ namespace cc { const_list_node *_prev = nullptr; const_list_node *_next = nullptr; const_list *_owner = nullptr; + + void (*_delete_cb)() = nullptr; - public: + public: constexpr const_list_node() noexcept { asserts(); } virtual constexpr ~const_list_node(); - + + constexpr void on_delete(void (*cb)()); + + private: + void notify_delete(); + friend class const_list; friend class _const_list_iterator_base; }; @@ -320,9 +328,24 @@ namespace cc { template constexpr const_list_node::~const_list_node() { + if (_delete_cb) + (*_delete_cb)(); _owner->remove(*this); } + template + constexpr void const_list_node::on_delete(void (*cb)()) + { + _delete_cb = cb; + } + + template + void const_list_node::notify_delete() + { + if (_delete_cb) + (*_delete_cb)(); + } + } // cc #endif //UDIFF_CONST_LIST_H_