Skip to content

Commit ce9927f

Browse files
authored
Replace random_shuffle with std::shuffle (#5463)
* Replace random_shuffle with std::shuffle * Use default ctor in RandomGenerator and clean up
1 parent 6260dc8 commit ce9927f

File tree

11 files changed

+48
-30
lines changed

11 files changed

+48
-30
lines changed

src/karts/kart_properties_manager.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "karts/kart_properties.hpp"
3232
#include "karts/xml_characteristic.hpp"
3333
#include "utils/log.hpp"
34+
#include "utils/random_generator.hpp"
3435
#include "utils/string_utils.hpp"
3536

3637
#include <algorithm>
@@ -685,8 +686,9 @@ void KartPropertiesManager::getRandomKartList(int count,
685686

686687
assert(random_kart_queue.size() > 0);
687688

688-
std::random_shuffle(random_kart_queue.begin(),
689-
random_kart_queue.end() );
689+
std::shuffle(random_kart_queue.begin(),
690+
random_kart_queue.end(),
691+
RandomGenerator::getGenerator());
690692
}
691693

692694
while (count > 0 && random_kart_queue.size() > 0)

src/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,7 @@ int handleCmdLinePreliminary()
10301030
if (CommandLine::has("--seed", &n))
10311031
{
10321032
srand(n);
1033+
RandomGenerator::seed(n);
10331034
Log::info("main", "STK using random seed (%d)", n);
10341035
}
10351036

src/modes/free_for_all.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ std::pair<int, video::SColor> FreeForAll::getSpeedometerDigit(
239239

240240
// Fade from green to red
241241
std::vector<int> sorted_scores;
242-
for (int i = 0; i < m_scores.size(); i++)
242+
for (unsigned int i = 0; i < m_scores.size(); i++)
243243
{
244244
if (!getKart(i)->isEliminated())
245245
{

src/modes/three_strikes_battle.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -708,8 +708,9 @@ void ThreeStrikesBattle::loadCustomModels()
708708
}
709709

710710
// Find random nodes to pre-spawn spare tire karts
711-
std::random_shuffle(sta_possible_nodes.begin(),
712-
sta_possible_nodes.end());
711+
std::shuffle(sta_possible_nodes.begin(),
712+
sta_possible_nodes.end(),
713+
RandomGenerator::getGenerator());
713714

714715
// Compute a random kart list
715716
std::vector<std::string> sta_list;

src/states_screens/arenas_screen.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,8 @@ void ArenasScreen::buildTrackList()
351351
w->addItem(_("Random Arena"), "random_track", "/gui/icons/track_random.png");
352352
w->updateItemDisplay();
353353

354-
std::random_shuffle( m_random_arena_list.begin(), m_random_arena_list.end() );
354+
std::shuffle( m_random_arena_list.begin(), m_random_arena_list.end(),
355+
RandomGenerator::getGenerator());
355356
}
356357

357358
// ------------------------------------------------------------------------------------------------------

src/states_screens/easter_egg_screen.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ void EasterEggScreen::buildTrackList()
258258
}
259259
tracks.insertionSort();
260260

261-
for (int n=0; n<tracks.size(); n++)
261+
for (unsigned int n=0; n<tracks.size(); n++)
262262
{
263263
Track* curr = tracks.get(n);
264264

@@ -288,7 +288,8 @@ void EasterEggScreen::buildTrackList()
288288
0 /* no badge */, IconButtonWidget::ICON_PATH_TYPE_RELATIVE);
289289

290290
tracks_widget->updateItemDisplay();
291-
std::random_shuffle( m_random_track_list.begin(), m_random_track_list.end() );
291+
std::shuffle( m_random_track_list.begin(), m_random_track_list.end(),
292+
RandomGenerator::getGenerator());
292293
}
293294

294295
// -----------------------------------------------------------------------------

src/states_screens/online/tracks_screen.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,8 @@ void TracksScreen::buildTrackList()
698698
IconButtonWidget::ICON_PATH_TYPE_RELATIVE);
699699

700700
tracks_widget->updateItemDisplay();
701-
std::random_shuffle( m_random_track_list.begin(), m_random_track_list.end() );
701+
std::shuffle( m_random_track_list.begin(), m_random_track_list.end(),
702+
RandomGenerator::getGenerator());
702703
} // buildTrackList
703704

704705
// -----------------------------------------------------------------------------

src/states_screens/tracks_and_gp_screen.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,8 @@ void TracksAndGPScreen::buildTrackList()
371371
}
372372

373373
tracks_widget->updateItemDisplay();
374-
std::random_shuffle( m_random_track_list.begin(), m_random_track_list.end() );
374+
std::shuffle( m_random_track_list.begin(), m_random_track_list.end(),
375+
RandomGenerator::getGenerator());
375376
} // buildTrackList
376377

377378
// -----------------------------------------------------------------------------

src/tracks/track.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ using namespace irr;
5555

5656
#include "utils/aligned_array.hpp"
5757
#include "utils/log.hpp"
58+
#include "utils/random_generator.hpp"
5859
#include "utils/vec3.hpp"
5960
#include "utils/stk_process.hpp"
6061

@@ -563,7 +564,8 @@ class Track
563564
*/
564565
void shuffleStartTransforms()
565566
{
566-
std::random_shuffle(m_start_transforms.begin(), m_start_transforms.end());
567+
std::shuffle(m_start_transforms.begin(), m_start_transforms.end(),
568+
RandomGenerator::getGenerator());
567569
}
568570
// ------------------------------------------------------------------------
569571
/** Sets pointer to the aabb of this track. */

src/utils/random_generator.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,19 @@
1818

1919
#include "utils/random_generator.hpp"
2020

21-
#include <stdlib.h>
22-
#include <ctime>
23-
2421
//std::vector<RandomGenerator*> RandomGenerator::m_all_random_generators;
2522

26-
RandomGenerator::RandomGenerator()
27-
{
28-
m_a = 1103515245;
29-
m_c = 12345;
30-
//m_all_random_generators.push_back(this);
31-
m_random_value = 3141591;
32-
} // RandomGenerator
23+
unsigned int RandomGenerator::m_random_value = RandomGenerator::default_seed;
24+
25+
std::mt19937& RandomGenerator::getGenerator() {
26+
static thread_local std::mt19937 generator = [] {
27+
if (m_random_value == default_seed)
28+
return std::mt19937{std::random_device{}()};
29+
else
30+
return std::mt19937{m_random_value};
31+
}();
32+
return generator;
33+
}
3334

3435
// ----------------------------------------------------------------------------
3536
#if 0

0 commit comments

Comments
 (0)