diff options
author | HampusM <hampus@hampusmat.com> | 2022-02-27 12:54:10 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-06-13 17:56:53 +0200 |
commit | 5864e5abc43b201c3801fa39a2fcaf9e3a9e8914 (patch) | |
tree | 98e5e324066ef4d1cbd3cc4c792a258fbd86c12d /src/randomization | |
parent | e233dc28491c33e8a7dc0a11576d3b8ce91cce2c (diff) |
refactor: use dependency injection
Diffstat (limited to 'src/randomization')
-rw-r--r-- | src/randomization/generator.cpp | 14 | ||||
-rw-r--r-- | src/randomization/generator.hpp | 18 | ||||
-rw-r--r-- | src/randomization/seed_generator.cpp | 11 | ||||
-rw-r--r-- | src/randomization/seed_generator.hpp | 17 |
4 files changed, 60 insertions, 0 deletions
diff --git a/src/randomization/generator.cpp b/src/randomization/generator.cpp new file mode 100644 index 0000000..b9bcb8a --- /dev/null +++ b/src/randomization/generator.cpp @@ -0,0 +1,14 @@ +#include "generator.hpp" + +RandomNumberGenerator::RandomNumberGenerator(const unsigned int &seed) +{ + this->_generator = std::make_unique<std::mt19937>(seed); +} + +unsigned int RandomNumberGenerator::in_range(const unsigned int &a, + const unsigned int &b) const +{ + auto random_distribution = std::uniform_int_distribution<unsigned int>(a, b); + + return random_distribution(*this->_generator); +} diff --git a/src/randomization/generator.hpp b/src/randomization/generator.hpp new file mode 100644 index 0000000..3acfc98 --- /dev/null +++ b/src/randomization/generator.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "interfaces/randomization.hpp" + +#include <memory> +#include <random> + +class RandomNumberGenerator : public IRandomNumberGenerator +{ +public: + explicit RandomNumberGenerator(const unsigned int &seed); + + [[nodiscard]] unsigned int in_range(const unsigned int &a, + const unsigned int &b) const override; + +private: + std::unique_ptr<std::mt19937> _generator; +}; diff --git a/src/randomization/seed_generator.cpp b/src/randomization/seed_generator.cpp new file mode 100644 index 0000000..fdb2b12 --- /dev/null +++ b/src/randomization/seed_generator.cpp @@ -0,0 +1,11 @@ +#include "seed_generator.hpp" + +SeedGenerator::SeedGenerator(const std::shared_ptr<std::random_device> &random_device) + : _random_device(random_device) +{ +} + +unsigned int SeedGenerator::random_seed() const +{ + return (*_random_device)(); +} diff --git a/src/randomization/seed_generator.hpp b/src/randomization/seed_generator.hpp new file mode 100644 index 0000000..238fdbe --- /dev/null +++ b/src/randomization/seed_generator.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "interfaces/randomization.hpp" + +#include <memory> +#include <random> + +class SeedGenerator : public ISeedGenerator +{ +public: + explicit SeedGenerator(const std::shared_ptr<std::random_device> &random_device); + + [[nodiscard]] unsigned int random_seed() const override; + +private: + const std::shared_ptr<std::random_device> &_random_device; +}; |