From 65b4ce6945ce7564b2256fca098c0d56e7377a73 Mon Sep 17 00:00:00 2001 From: ravi688 Date: Sat, 11 Apr 2026 13:28:48 +0530 Subject: [PATCH] WIP --- include/common/DynamicPool.hpp | 11 +++++++---- include/common/DynamicPoolFast.hpp | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/common/DynamicPool.hpp b/include/common/DynamicPool.hpp index 66409ef..56261f1 100644 --- a/include/common/DynamicPool.hpp +++ b/include/common/DynamicPool.hpp @@ -32,7 +32,8 @@ namespace com typename std::vector::iterator getLastActive() noexcept; protected: - void put_(T value, FindValueCallback findValueCallback) noexcept; + template + void put_(T value, FindValueCallback findValueCallback, SwapFn swap) noexcept; std::vector& getStorage() { return m_storage; } @@ -159,11 +160,13 @@ namespace com { auto lastActiveEnd = std::next(getLastActive(), 1); return std::find(m_storage.begin(), lastActiveEnd, value);; - }); + }, + [](auto&& a, auto&& b) { std::swap(std::forward(a), std::forward(b)); }); } template - void DynamicPool::put_(T value, FindValueCallback findValueCallback) noexcept + template + void DynamicPool::put_(T value, FindValueCallback findValueCallback, SwapFn swap) noexcept { _com_assert(m_activeCount > 0); @@ -178,7 +181,7 @@ namespace com *it = std::move(value); // If yes then swap this value with the last active value - std::swap(*it, *lastActive); + swap(*it, *lastActive); m_onReturn(*lastActive); --m_activeCount; } diff --git a/include/common/DynamicPoolFast.hpp b/include/common/DynamicPoolFast.hpp index 53a4e6a..acb8afb 100644 --- a/include/common/DynamicPoolFast.hpp +++ b/include/common/DynamicPoolFast.hpp @@ -101,6 +101,11 @@ namespace com DynamicPool>::put_(std::move(el), [this](const DynamicPoolFastElement& el) { return std::next(DynamicPool>::getStorage().begin(), el.getIndex()); + }, + [](auto&& a, auto&& b) + { + std::swap(a.m_index, b.m_index); + std::swap(std::forward(a), std::forward(b)); }); } };