Random.h 654 B

123456789101112131415161718192021222324252627
  1. // Copyright 2018 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <cstddef>
  5. #include <memory>
  6. #include <type_traits>
  7. #include "Common/CommonTypes.h"
  8. namespace Common::Random
  9. {
  10. /// Fill `buffer` with random bytes using a cryptographically secure pseudo-random number generator.
  11. void Generate(void* buffer, std::size_t size);
  12. /// Generates a random value of arithmetic type `T`
  13. template <typename T>
  14. T GenerateValue()
  15. {
  16. static_assert(std::is_arithmetic<T>(), "T must be an arithmetic type in GenerateValue.");
  17. T value;
  18. Generate(&value, sizeof(value));
  19. return value;
  20. }
  21. } // namespace Common::Random