mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Random: Add seeded PRNG
This commit is contained in:
@ -5,12 +5,37 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
#include <memory>
|
||||
#include <type_traits>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
|
||||
namespace Common::Random
|
||||
{
|
||||
/// Cryptographically secure pseudo-random number generator, with explicit seed.
|
||||
class PRNG final
|
||||
{
|
||||
public:
|
||||
explicit PRNG(u64 seed) : PRNG(&seed, sizeof(u64)) {}
|
||||
PRNG(void* seed, std::size_t size);
|
||||
~PRNG();
|
||||
|
||||
void Generate(void* buffer, std::size_t size);
|
||||
|
||||
template <typename T>
|
||||
T GenerateValue()
|
||||
{
|
||||
static_assert(std::is_arithmetic<T>(), "T must be an arithmetic type in GenerateValue.");
|
||||
T value;
|
||||
Generate(&value, sizeof(value));
|
||||
return value;
|
||||
}
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
std::unique_ptr<Impl> m_impl;
|
||||
};
|
||||
|
||||
/// Fill `buffer` with random bytes using a cryptographically secure pseudo-random number generator.
|
||||
void Generate(void* buffer, std::size_t size);
|
||||
|
||||
|
Reference in New Issue
Block a user