From 5b9b2c26dc1acaff86c8724ad756fbba4350d89a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sun, 29 Sep 2013 11:36:06 +0000 Subject: [PATCH] Implemented 2x grow factor for vector capacity [SVN r85996] --- include/boost/container/detail/utilities.hpp | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/include/boost/container/detail/utilities.hpp b/include/boost/container/detail/utilities.hpp index c42087c..8aa020a 100644 --- a/include/boost/container/detail/utilities.hpp +++ b/include/boost/container/detail/utilities.hpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -115,18 +116,21 @@ SizeType ,const SizeType capacity ,const SizeType n) { -// if (n > max_size - capacity) -// throw std::length_error("get_next_capacity"); + const SizeType remaining = max_size - capacity; + if ( remaining < n ) + boost::container::throw_length_error("get_next_capacity, allocator's max_size reached"); + const SizeType additional = max_value(n, capacity); + return ( remaining < additional ) ? max_size : ( capacity + additional ); + #if 0 //Alternative for 50% grow + const SizeType m3 = max_size/3; - const SizeType m3 = max_size/3; + if (capacity < m3) + return capacity + max_value(3*(capacity+1)/5, n); - if (capacity < m3) - return capacity + max_value(3*(capacity+1)/5, n); - - if (capacity < m3*2) - return capacity + max_value((capacity+1)/2, n); - - return max_size; + if (capacity < m3*2) + return capacity + max_value((capacity+1)/2, n); + return max_size; + #endif } template