diff --git a/Include/auROXTL/auContainerUtils.hpp b/Include/auROXTL/auContainerUtils.hpp index d79f818..f64e2e1 100644 --- a/Include/auROXTL/auContainerUtils.hpp +++ b/Include/auROXTL/auContainerUtils.hpp @@ -372,22 +372,42 @@ inline bool AuTryInsert(Container &container, const Key_t &key, Type_t &&value, } template -inline bool AuContainerExpandOne(Container &container) +inline bool AuTryReserve(Container &container, AuUInt uRequired) { - auto required = container.size() + 1; - if (container.capacity() >= required) + if (container.capacity() >= uRequired) { return true; } - - container.reserve(required); - return container.capacity() >= required; + + AUROXTL_COMMODITY_TRY + { + container.reserve(uRequired); + } + AUROXTL_COMMODITY_CATCH + { + return false; + } + + return container.capacity() >= uRequired; } template -inline bool AuContainerExpandOne(Container *container) +inline bool AuContainerReserveSpaceForOne(Container &container) { - return AuContainerExpandOne(*container); + auto uCapacity = container.size(); + + if (container.capacity() >= (uCapacity + 1)) + { + return true; + } + + return AuTryReserve(container, uCapacity > 512 ? 512 : uCapacity + 32); +} + +template +inline bool AuContainerReserveSpaceForOne(Container *container) +{ + return AuContainerReserveSpaceForOne(*container); } template && !AuIsPointer_v)> @@ -397,7 +417,7 @@ inline bool AuTryInsert(Container &container, const Value &value) { if constexpr (__audetail::AuIsPreallocatable_v>) { - if (!AuContainerExpandOne(container)) + if (!AuContainerReserveSpaceForOne(container)) { return false; } @@ -420,7 +440,7 @@ inline bool AuTryInsert(Container &container, Value &&value) { if constexpr (__audetail::AuIsPreallocatable_v>) { - if (!AuContainerExpandOne(container)) + if (!AuContainerReserveSpaceForOne(container)) { return false; } @@ -443,7 +463,7 @@ inline bool AuTryInsert(Container &container, Value &&value) { if constexpr (__audetail::AuIsPreallocatable_v>) { - if (!AuContainerExpandOne(container)) + if (!AuContainerReserveSpaceForOne(container)) { return false; } @@ -466,7 +486,7 @@ inline bool AuTryInsert(Container &container, const Value &value) { if constexpr (__audetail::AuIsPreallocatable_v>) { - if (!AuContainerExpandOne(container)) + if (!AuContainerReserveSpaceForOne(container)) { return false; }