Common/Random: Add convenience template for simple arithmetic values

In cases where we just want a random value for a primitive arithmetic
type, we can wrap this in a template to allow convenient direct
assignment instead of keeping declaration and initialization separate
(making it more difficult to use values uninitialized). This also allows
the use of Common::Random with functions such as std::generate, making
it more flexible in how random values can be generated.
This commit is contained in:
Lioncash
2018-06-14 10:26:11 -04:00
parent e69c6cdaab
commit 189d277cfc
4 changed files with 15 additions and 6 deletions

View File

@ -5,6 +5,7 @@
#pragma once
#include <cstddef>
#include <type_traits>
#include "Common/CommonTypes.h"
@ -12,4 +13,14 @@ namespace Common::Random
{
/// Fill `buffer` with random bytes using a cryptographically secure pseudo-random number generator.
void Generate(void* buffer, std::size_t size);
/// Generates a random value of arithmetic type `T`
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;
}
} // namespace Common::Random