| // | |
| // 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 |