Skip to content

Commit 8470abf

Browse files
committed
Comment default block size logic, round up default_block_start
1 parent df4af09 commit 8470abf

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

include/boost/container/deque.hpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,27 @@ template<class T, std::size_t BlockBytes, std::size_t BlockSize, class StoredSiz
7575
struct deque_block_traits
7676
{
7777
BOOST_CONTAINER_STATIC_ASSERT_MSG(!(BlockBytes && BlockSize), "BlockBytes and BlockSize can't be specified at the same time");
78+
//Calculate default block size
7879
BOOST_STATIC_CONSTEXPR std::size_t default_block_bytes = sizeof(void*)*128u;
79-
BOOST_STATIC_CONSTEXPR std::size_t default_block_start = default_block_bytes/sizeof(T);
80-
BOOST_STATIC_CONSTEXPR std::size_t default_min_block_size = 16u;
81-
BOOST_STATIC_CONSTEXPR std::size_t default_block_size_initial = default_block_start < default_min_block_size
80+
BOOST_STATIC_CONSTEXPR std::size_t default_block_start = (default_block_bytes - 1u)/sizeof(T) + 1u;
81+
//Round to the next power of two
82+
BOOST_STATIC_CONSTEXPR std::size_t default_block_size_upp_pow2 = dtl::upper_power_of_2_ct<std::size_t, default_block_start>::value;
83+
84+
//Check minimal size
85+
BOOST_STATIC_CONSTEXPR std::size_t default_min_block_size_pow = 3u;
86+
BOOST_STATIC_CONSTEXPR std::size_t default_min_block_size = 8u;
87+
BOOST_STATIC_CONSTEXPR std::size_t default_block_size_initial = default_block_size_upp_pow2 < default_min_block_size
8288
? default_min_block_size
83-
: dtl::upper_power_of_2_ct<std::size_t, default_block_start>::value;
84-
BOOST_STATIC_CONSTEXPR std::size_t max_stored_size_block_size = std::size_t(1u) << (sizeof(StoredSizeType)*CHAR_BIT - 4u);
85-
BOOST_STATIC_CONSTEXPR std::size_t default_block_size = default_block_size_initial > max_stored_size_block_size
86-
? max_stored_size_block_size
87-
: default_block_size_initial;
89+
: default_block_size_upp_pow2;
8890

89-
BOOST_STATIC_CONSTEXPR std::size_t value = BlockSize ? BlockSize
90-
: BlockBytes ? (BlockBytes-1u)/sizeof(T) + 1u
91-
: default_block_size
91+
//Limit by stored size max value
92+
BOOST_STATIC_CONSTEXPR std::size_t max_stored_size_block_size = std::size_t(1u) << (sizeof(StoredSizeType)*CHAR_BIT - default_min_block_size_pow);
93+
BOOST_STATIC_CONSTEXPR std::size_t default_block_size = default_block_size_initial > max_stored_size_block_size
94+
? max_stored_size_block_size
95+
: default_block_size_initial;
96+
//Now select between the default or the specified by the user
97+
BOOST_STATIC_CONSTEXPR std::size_t value = BlockSize ? BlockSize
98+
: BlockBytes ? (BlockBytes-1u)/sizeof(T) + 1u : default_block_size
9299
;
93100
BOOST_CONTAINER_STATIC_ASSERT_MSG(value <= max_stored_size_block_size, "BlockSize or BlockBytes is too big for the stored_size_type");
94101

0 commit comments

Comments
 (0)