random.h 646 B

12345678910111213141516171819202122232425
  1. #pragma once
  2. #include <memory>
  3. namespace engine {
  4. namespace detail {
  5. struct random_impl;
  6. }
  7. class random_number_generator {
  8. public:
  9. random_number_generator();
  10. template <typename Provider>
  11. random_number_generator(Provider const & p)
  12. : p_impl(std::make_shared<Provider>(p)) {}
  13. template <typename Provider>
  14. random_number_generator(std::shared_ptr<Provider> const & p) : p_impl(p) {}
  15. unsigned int exclusive(unsigned int max) const;
  16. double exclusive(double min, double max) const;
  17. double inclusive(double min, double max) const;
  18. private:
  19. std::shared_ptr<detail::random_impl> p_impl;
  20. };
  21. }