diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-03-23 14:21:12 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-03-23 14:21:12 +0000 |
commit | 035299f23a9207bb521b19e2f77154c276cf3033 (patch) | |
tree | 33d24274a6eb716d1d92f9bff074c3e81b8fb71e /lib | |
parent | Other objects support in operator= (diff) | |
download | ilt-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.h | 11 |
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 { |