mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
Add Random::Shuffle
This is just a wrapper to std::shuffle since it requires a random engine and ours lives in a class Must pass random access iterators (array, vector, deque, etc) ex: std::vector<int> v; /* init ... */ random.Shuffle(v.begin(), v.end());
This commit is contained in:
parent
026d5e71fa
commit
62181ff08c
@ -21,6 +21,9 @@
|
||||
|
||||
#include <random>
|
||||
#include <utility>
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <type_traits>
|
||||
|
||||
/* This uses mt19937 seeded with the std::random_device
|
||||
* The idea is to have this be included as a member of another class
|
||||
@ -62,6 +65,16 @@ namespace EQEmu {
|
||||
return Real(0.0, 1.0) <= required;
|
||||
}
|
||||
|
||||
// std::shuffle requires a RNG engine passed to it, so lets provide a wrapper to use our engine
|
||||
template<typename RandomAccessIterator>
|
||||
void Shuffle(RandomAccessIterator first, RandomAccessIterator last)
|
||||
{
|
||||
static_assert(std::is_same<std::random_access_iterator_tag,
|
||||
typename std::iterator_traits<RandomAccessIterator>::iterator_category>::value,
|
||||
"EQEmu::Random::Shuffle requires random access iterators");
|
||||
std::shuffle(first, last, m_gen);
|
||||
}
|
||||
|
||||
void Reseed()
|
||||
{
|
||||
// We could do the seed_seq thing here too if we need better seeding
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user