#pragma once #include class ISeedGenerator { public: virtual ~ISeedGenerator() = default; [[nodiscard]] virtual unsigned int random_seed() const = 0; }; using ISeedGeneratorFactory = std::shared_ptr (*)(); /** * Pseudo-random unsigned integer generator. */ class IRandomNumberGenerator { public: virtual ~IRandomNumberGenerator() = default; /** * Returns a number in the range of a to b. * * @param a A number lower than b * @param b A number greater than a */ [[nodiscard]] virtual unsigned int in_range(const unsigned int &a, const unsigned int &b) const = 0; }; using IRandomNumberGeneratorFactory = std::shared_ptr (*)(const unsigned int &seed);