1
0
forked from boostorg/move

Optimize case with 256 keys or less.

This commit is contained in:
Ion Gaztañaga
2018-04-29 12:02:07 +02:00
parent 06e5c18802
commit f76b4963b5
2 changed files with 13 additions and 4 deletions

View File

@ -292,9 +292,18 @@ bool adaptive_sort_combine_all_blocks
//Combine to form l_merged*2 segments
if(n_keys){
adaptive_sort_combine_blocks
( keys, comp, !use_internal_buf || is_merge_left ? first : first-l_block
, l_data, l_merged, l_block, use_internal_buf, common_xbuf, xbuf, comp, is_merge_left);
size_type upper_n_keys_this_iter = 2*l_merged/l_block;
if(upper_n_keys_this_iter > 256){
adaptive_sort_combine_blocks
( keys, comp, !use_internal_buf || is_merge_left ? first : first-l_block
, l_data, l_merged, l_block, use_internal_buf, common_xbuf, xbuf, comp, is_merge_left);
}
else{
unsigned char uint_keys[256];
adaptive_sort_combine_blocks
( uint_keys, less(), !use_internal_buf || is_merge_left ? first : first-l_block
, l_data, l_merged, l_block, use_internal_buf, common_xbuf, xbuf, comp, is_merge_left);
}
}
else{
size_type *const uint_keys = xbuf.template aligned_trailing<size_type>();

View File

@ -868,7 +868,7 @@ void initialize_keys( RandIt first, RandIt last
typedef typename iterator_traits<RandIt>::value_type value_type;
std::size_t count = std::size_t(last - first);
for(std::size_t i = 0; i != count; ++i){
*first = value_type(i);
*first = static_cast<value_type>(i);
++first;
}
}