summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-03-23 14:21:12 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2025-03-23 14:21:12 +0000
commit035299f23a9207bb521b19e2f77154c276cf3033 (patch)
tree33d24274a6eb716d1d92f9bff074c3e81b8fb71e /lib
parentOther objects support in operator= (diff)
downloadilt-035299f23a9207bb521b19e2f77154c276cf3033.tar.bz2
ilt-035299f23a9207bb521b19e2f77154c276cf3033.tar.xz
ilt-035299f23a9207bb521b19e2f77154c276cf3033.zip
Other objects support in removeAll/clear
removeAll requires a type that is one of Others, clear clears everything regardless of type.
Diffstat (limited to 'lib')
-rw-r--r--lib/collection.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/collection.h b/lib/collection.h
index 329b681..98f043b 100644
--- a/lib/collection.h
+++ b/lib/collection.h
@@ -103,15 +103,24 @@ public:
return applyOne_internal<T>(objects.rbegin(), objects.rend(), m, std::forward<Params>(params)...);
}
- template<typename T = Object>
+ template<typename T>
+ requires(std::is_convertible_v<T *, Others *> || ...)
auto
removeAll()
{
+ std::get<OtherObjects<T>>(otherObjects).clear();
return std::erase_if(objects, [](auto && op) {
return dynamic_cast<T *>(op.get());
});
}
+ void
+ clear()
+ {
+ ((std::get<OtherObjects<Others>>(otherObjects).clear()), ...);
+ objects.clear();
+ }
+
[[nodiscard]] auto
begin() const
{