#pragma once #include #include class ISeedGenerator { public: [[nodiscard]] virtual unsigned int random_seed() const = 0; }; using ISeedGeneratorFactory = std::function()>; /** * Pseudo-random unsigned integer generator. */ class IRandomNumberGenerator { public: /** * 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::function(const unsigned int &seed)>;