diff options
author | Lioncash <mathew1800@gmail.com> | 2020-08-05 21:33:09 +0200 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2020-08-05 21:34:27 +0200 |
commit | 87c64c41d234019d9994f6c83c6fe656a1ab13c3 (patch) | |
tree | 3c3bfdb80f2d9e1c4e5ce12d98d5f36c14340324 /src/core/hle/kernel/memory/system_control.cpp | |
parent | Merge pull request #4466 from ogniK5377/loader-type-safe (diff) | |
download | yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.tar yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.tar.gz yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.tar.bz2 yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.tar.lz yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.tar.xz yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.tar.zst yuzu-87c64c41d234019d9994f6c83c6fe656a1ab13c3.zip |
Diffstat (limited to '')
-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); } |