[+] IRandomDevice::ShuffleIterators
[+] IRandomDevice::ShuffleList [+] AuRNG::RngShuffleIterators [+] AuRNG::RngShuffleList
This commit is contained in:
parent
b07db2a2c9
commit
8c101cea6f
@ -103,16 +103,40 @@ namespace Aurora::RNG
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline T &NextVector(AuList<T> &items)
|
inline T &NextList(AuList<T> &items)
|
||||||
{
|
{
|
||||||
return *NextRange(items);
|
return *NextRange(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline const T &NextVector(const AuList<T> &items)
|
inline const T &NextList(const AuList<T> &items)
|
||||||
{
|
{
|
||||||
return *NextRange(items);
|
return *NextRange(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void ShuffleIterators(T begin, T end)
|
||||||
|
{
|
||||||
|
AU_DEBUG_MEMCRUNCH;
|
||||||
|
|
||||||
|
auto uCount = std::distance(begin, end);
|
||||||
|
auto nextIndexArray = this->NextArrayU32Range(uCount, 0, uCount - 1);
|
||||||
|
|
||||||
|
for (AU_ITERATE_N(i, AuUInt(uCount)))
|
||||||
|
{
|
||||||
|
auto nextItrA = begin;
|
||||||
|
auto nextItrB = begin;
|
||||||
|
std::advance(nextItrA, i);
|
||||||
|
std::advance(nextItrB, nextIndexArray[i]);
|
||||||
|
AuSwap(*nextItrA, *nextItrB);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void ShuffleList(AuList<T> &list)
|
||||||
|
{
|
||||||
|
this->ShuffleIterators(list.begin(), list.end());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AUKN_SHARED_SOO2(Random, IRandomDevice, kSizeRNGDevice,
|
AUKN_SHARED_SOO2(Random, IRandomDevice, kSizeRNGDevice,
|
||||||
|
@ -124,14 +124,38 @@ namespace Aurora::RNG
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static auline T &RngVector(AuList<T> &items)
|
static auline T &RngList(AuList<T> &items)
|
||||||
{
|
{
|
||||||
return *RngRange(items);
|
return *RngRange(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static auline const T &RngVector(const AuList<T> &items)
|
static auline const T &RngList(const AuList<T> &items)
|
||||||
{
|
{
|
||||||
return *RngRange(items);
|
return *RngRange(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void RngShuffleIterators(T begin, T end)
|
||||||
|
{
|
||||||
|
AU_DEBUG_MEMCRUNCH;
|
||||||
|
|
||||||
|
auto uCount = std::distance(begin, end);
|
||||||
|
auto nextIndexArray = RngArrayU32Range(uCount, 0, uCount - 1);
|
||||||
|
|
||||||
|
for (AU_ITERATE_N(i, AuUInt(uCount)))
|
||||||
|
{
|
||||||
|
auto nextItrA = begin;
|
||||||
|
auto nextItrB = begin;
|
||||||
|
std::advance(nextItrA, i);
|
||||||
|
std::advance(nextItrB, nextIndexArray[i]);
|
||||||
|
AuSwap(*nextItrA, *nextItrB);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void RngShuffleList(AuList<T> &list)
|
||||||
|
{
|
||||||
|
RngShuffleIterators(list.begin(), list.end());
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user