#pragma once #include class ISeedGenerator { public: virtual ~ISeedGenerator() = default; [[nodiscard]] virtual uint32_t 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 uint32_t in_range(const uint32_t &a, const uint32_t &b) const = 0; }; using IRandomNumberGeneratorFactory = std::shared_ptr (*)(const uint32_t &seed);