зеркало из https://github.com/AvaloniaUI/angle.git
85 строки
1.8 KiB
C++
85 строки
1.8 KiB
C++
//
|
|
// Copyright 2014 The ANGLE Project Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// random_utils:
|
|
// Helper functions for random number generation.
|
|
//
|
|
|
|
#include "random_utils.h"
|
|
|
|
#include <chrono>
|
|
|
|
#include <cstdlib>
|
|
|
|
namespace angle
|
|
{
|
|
|
|
// Seed from clock
|
|
RNG::RNG()
|
|
{
|
|
long long timeSeed = std::chrono::system_clock::now().time_since_epoch().count();
|
|
mGenerator.seed(static_cast<unsigned int>(timeSeed));
|
|
}
|
|
|
|
// Seed from fixed number.
|
|
RNG::RNG(unsigned int seed) : mGenerator(seed) {}
|
|
|
|
RNG::~RNG() {}
|
|
|
|
void RNG::reseed(unsigned int newSeed)
|
|
{
|
|
mGenerator.seed(newSeed);
|
|
}
|
|
|
|
bool RNG::randomBool(float probTrue)
|
|
{
|
|
std::bernoulli_distribution dist(probTrue);
|
|
return dist(mGenerator);
|
|
}
|
|
|
|
int RNG::randomInt()
|
|
{
|
|
std::uniform_int_distribution<int> intDistribution;
|
|
return intDistribution(mGenerator);
|
|
}
|
|
|
|
int RNG::randomIntBetween(int min, int max)
|
|
{
|
|
std::uniform_int_distribution<int> intDistribution(min, max);
|
|
return intDistribution(mGenerator);
|
|
}
|
|
|
|
unsigned int RNG::randomUInt()
|
|
{
|
|
std::uniform_int_distribution<unsigned int> uintDistribution;
|
|
return uintDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomFloat()
|
|
{
|
|
std::uniform_real_distribution<float> floatDistribution;
|
|
return floatDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomFloatBetween(float min, float max)
|
|
{
|
|
std::uniform_real_distribution<float> floatDistribution(min, max);
|
|
return floatDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomFloatNonnegative()
|
|
{
|
|
std::uniform_real_distribution<float> floatDistribution(0.0f,
|
|
std::numeric_limits<float>::max());
|
|
return floatDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomNegativeOneToOne()
|
|
{
|
|
return randomFloatBetween(-1.0f, 1.0f);
|
|
}
|
|
|
|
} // namespace angle
|