diff options
Diffstat (limited to 'Source/ThirdParty/ANGLE/util/random_utils.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/util/random_utils.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/util/random_utils.cpp b/Source/ThirdParty/ANGLE/util/random_utils.cpp new file mode 100644 index 000000000..2968a3f91 --- /dev/null +++ b/Source/ThirdParty/ANGLE/util/random_utils.cpp @@ -0,0 +1,75 @@ +// +// Copyright (c) 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); +} + +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::randomNegativeOneToOne() +{ + return randomFloatBetween(-1.0f, 1.0f); +} + +} // namespace angle |