1
0

FastRandom: Remove discrepancy between arg and return value type. (#3846)

This commit is contained in:
Mattes D 2017-07-21 12:06:21 +02:00 committed by GitHub
parent f9b56dd859
commit 895987a111
3 changed files with 15 additions and 19 deletions

View File

@ -77,8 +77,8 @@ public:
/** Return a random IntType in the range [a_Min, a_Max]. */ /** Return a random IntType in the range [a_Min, a_Max]. */
template <class IntType = int, class ArgType> template <class IntType = int>
IntType RandInt(ArgType a_Min, ArgType a_Max) IntType RandInt(IntType a_Min, IntType a_Max)
{ {
ASSERT( ASSERT(
(a_Max >= a_Min) && (a_Max >= a_Min) &&
@ -97,8 +97,8 @@ public:
/** Return a random IntType in the range [0, a_Max]. */ /** Return a random IntType in the range [0, a_Max]. */
template <class IntType = int, class ArgType> template <class IntType = int>
IntType RandInt(ArgType a_Max) IntType RandInt(IntType a_Max)
{ {
ASSERT((a_Max >= 0) && (a_Max <= std::numeric_limits<IntType>::max())); ASSERT((a_Max >= 0) && (a_Max <= std::numeric_limits<IntType>::max()));
Detail::cUniform<IntType> dist(IntType(0), static_cast<IntType>(a_Max)); Detail::cUniform<IntType> dist(IntType(0), static_cast<IntType>(a_Max));
@ -122,8 +122,8 @@ public:
/** Return a random RealType in the range [a_Min, a_Max). */ /** Return a random RealType in the range [a_Min, a_Max). */
template <class RealType = float, class ArgType> template <class RealType = float>
RealType RandReal(ArgType a_Min, ArgType a_Max) RealType RandReal(RealType a_Min, RealType a_Max)
{ {
std::uniform_real_distribution<RealType> dist(a_Min, a_Max); std::uniform_real_distribution<RealType> dist(a_Min, a_Max);
return dist(m_Engine); return dist(m_Engine);
@ -134,8 +134,8 @@ public:
/** Return a random RealType in the range [0, a_Max). */ /** Return a random RealType in the range [0, a_Max). */
template <class RealType = float, class ArgType> template <class RealType = float>
RealType RandReal(ArgType a_Max) RealType RandReal(RealType a_Max)
{ {
std::uniform_real_distribution<RealType> dist(RealType(0), a_Max); std::uniform_real_distribution<RealType> dist(RealType(0), a_Max);
return dist(m_Engine); return dist(m_Engine);

View File

@ -45,12 +45,12 @@ bool cMobSpawner::CheckPackCenter(BLOCKTYPE a_BlockType)
void cMobSpawner::addIfAllowed(eMonsterType toAdd, std::set<eMonsterType>& toAddIn) void cMobSpawner::addIfAllowed(eMonsterType toAdd, std::vector<eMonsterType> & toAddIn)
{ {
std::set<eMonsterType>::iterator itr = m_AllowedTypes.find(toAdd); std::set<eMonsterType>::iterator itr = m_AllowedTypes.find(toAdd);
if (itr != m_AllowedTypes.end()) if (itr != m_AllowedTypes.end())
{ {
toAddIn.insert(toAdd); toAddIn.push_back(toAdd);
} }
} }
@ -60,7 +60,7 @@ void cMobSpawner::addIfAllowed(eMonsterType toAdd, std::set<eMonsterType>& toAdd
eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome) eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome)
{ {
std::set<eMonsterType> allowedMobs; std::vector<eMonsterType> allowedMobs;
if ((a_Biome == biMushroomIsland) || (a_Biome == biMushroomShore)) if ((a_Biome == biMushroomIsland) || (a_Biome == biMushroomShore))
{ {
@ -107,15 +107,11 @@ eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome)
} }
} }
// Pick a random mob from the options:
size_t allowedMobsSize = allowedMobs.size(); size_t allowedMobsSize = allowedMobs.size();
if (allowedMobsSize > 0) if (allowedMobsSize > 0)
{ {
std::set<eMonsterType>::iterator itr = allowedMobs.begin(); return allowedMobs[GetRandomProvider().RandInt(allowedMobsSize - 1)];
using DiffType = decltype(itr)::difference_type;
std::advance(itr, GetRandomProvider().RandInt<DiffType>(allowedMobsSize - 1));
return *itr;
} }
return mtInvalidType; return mtInvalidType;
} }

View File

@ -58,13 +58,13 @@ protected :
eMonsterType ChooseMobType(EMCSBiome a_Biome); eMonsterType ChooseMobType(EMCSBiome a_Biome);
/** Adds toAdd into toAddIn, if toAdd is in m_AllowedTypes */ /** Adds toAdd into toAddIn, if toAdd is in m_AllowedTypes */
void addIfAllowed(eMonsterType toAdd, std::set<eMonsterType> & toAddIn); void addIfAllowed(eMonsterType toAdd, std::vector<eMonsterType> & toAddIn);
cMonster::eFamily m_MonsterFamily; cMonster::eFamily m_MonsterFamily;
std::set<eMonsterType> m_AllowedTypes; std::set<eMonsterType> m_AllowedTypes;
bool m_NewPack; bool m_NewPack;
eMonsterType m_MobType; eMonsterType m_MobType;
std::set<cMonster*> m_Spawned; std::set<cMonster *> m_Spawned;
} ; } ;