diff options
author | bunnei <bunneidev@gmail.com> | 2020-08-15 08:11:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-15 08:11:49 +0200 |
commit | cb6808b4d00f6742850f32464ea8a4403cfa7b63 (patch) | |
tree | 67638585b6f6b100c98e8078db523ca5fe55d5ca /src/core/hle/kernel/memory/system_control.cpp | |
parent | Merge pull request #4463 from lioncash/lockdiscard (diff) | |
parent | system_control: Make functions internally linked where applicable (diff) | |
download | yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.tar yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.tar.gz yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.tar.bz2 yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.tar.lz yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.tar.xz yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.tar.zst yuzu-cb6808b4d00f6742850f32464ea8a4403cfa7b63.zip |
Diffstat (limited to 'src/core/hle/kernel/memory/system_control.cpp')
-rw-r--r-- | src/core/hle/kernel/memory/system_control.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/core/hle/kernel/memory/system_control.cpp b/src/core/hle/kernel/memory/system_control.cpp index 2f98e9c4c..11d204bc2 100644 --- a/src/core/hle/kernel/memory/system_control.cpp +++ b/src/core/hle/kernel/memory/system_control.cpp @@ -7,22 +7,15 @@ #include "core/hle/kernel/memory/system_control.h" namespace Kernel::Memory::SystemControl { - -u64 GenerateRandomU64ForInit() { - static std::random_device device; - static std::mt19937 gen(device()); - static std::uniform_int_distribution<u64> distribution(1, std::numeric_limits<u64>::max()); - return distribution(gen); -} - +namespace { template <typename F> u64 GenerateUniformRange(u64 min, u64 max, F f) { - /* Handle the case where the difference is too large to represent. */ + // Handle the case where the difference is too large to represent. if (max == std::numeric_limits<u64>::max() && min == std::numeric_limits<u64>::min()) { return f(); } - /* Iterate until we get a value in range. */ + // Iterate until we get a value in range. const u64 range_size = ((max + 1) - min); const u64 effective_max = (std::numeric_limits<u64>::max() / range_size) * range_size; while (true) { @@ -32,6 +25,14 @@ u64 GenerateUniformRange(u64 min, u64 max, F f) { } } +u64 GenerateRandomU64ForInit() { + static std::random_device device; + static std::mt19937 gen(device()); + static std::uniform_int_distribution<u64> distribution(1, std::numeric_limits<u64>::max()); + return distribution(gen); +} +} // Anonymous namespace + u64 GenerateRandomRange(u64 min, u64 max) { return GenerateUniformRange(min, max, GenerateRandomU64ForInit); } |