Add custom random_shuffle as some old compiler implementations self-swap some elements.

This commit is contained in:
Ion Gaztañaga
2016-07-31 23:15:39 +02:00
parent e499ed490b
commit 8f136bc909
2 changed files with 148 additions and 136 deletions

View File

@@ -37,6 +37,19 @@ void compare_times(cpu_times time_numerator, cpu_times time_denominator){
std::cout << "----------------------------------------------" << '\n' << std::endl;
}
template< class RandomIt >
void random_shuffle( RandomIt first, RandomIt last )
{
typedef typename boost::container::iterator_traits<RandomIt>::difference_type difference_type;
difference_type n = last - first;
for (difference_type i = n-1; i > 0; --i) {
difference_type j = std::rand() % (i+1);
if(j != i) {
boost::adl_move_swap(first[i], first[j]);
}
}
}
boost::container::vector<int> sorted_unique_range_int;
boost::container::vector<int> sorted_range_int;
boost::container::vector<int> random_unique_range_int;
@@ -57,11 +70,11 @@ void fill_range_ints()
//random_range_int
std::srand(0);
random_range_int.assign(sorted_range_int.begin(), sorted_range_int.end());
std::random_shuffle(random_range_int.begin(), random_range_int.end());
::random_shuffle(random_range_int.begin(), random_range_int.end());
//random_unique_range_int
std::srand(0);
random_unique_range_int.assign(sorted_unique_range_int.begin(), sorted_unique_range_int.end());
std::random_shuffle(random_unique_range_int.begin(), random_unique_range_int.end());
::random_shuffle(random_unique_range_int.begin(), random_unique_range_int.end());
}
boost::container::vector<boost::container::string> sorted_unique_range_string;
@@ -93,11 +106,11 @@ void fill_range_strings()
//random_range_string
std::srand(0);
random_range_string.assign(sorted_range_string.begin(), sorted_range_string.end());
std::random_shuffle(random_range_string.begin(), random_range_string.end());
::random_shuffle(random_range_string.begin(), random_range_string.end());
//random_unique_range_string
std::srand(0);
random_unique_range_string.assign(sorted_unique_range_string.begin(), sorted_unique_range_string.end());
std::random_shuffle(random_unique_range_string.begin(), random_unique_range_string.end());
::random_shuffle(random_unique_range_string.begin(), random_unique_range_string.end());
}
template<class T>

View File

@@ -35,7 +35,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="winmm.lib"
AdditionalDependencies="winmm.lib libboost_chrono-vc71-mt-gd-1_61.lib libboost_timer-vc71-mt-gd-1_61.lib libboost_system-vc71-mt-gd-1_61.lib"
OutputFile="$(OutDir)/bench_set_d.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="../../../../stage/lib"
@@ -43,8 +43,7 @@
ProgramDatabaseFile="$(OutDir)/bench_set.pdb"
SubSystem="1"
TargetMachine="1"
FixedBaseAddress="1"
/>
FixedBaseAddress="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool