#pragma once #include // NOLINTNEXTLINE(cppcoreguidelines-special-member-functions) class ISeedGenerator { public: virtual ~ISeedGenerator() noexcept = default; [[nodiscard]] virtual auto random_seed() const noexcept -> uint32_t = 0; }; using ISeedGeneratorFactory = std::shared_ptr (*)(); // NOLINTNEXTLINE(cppcoreguidelines-special-member-functions) class IRandomNumberGenerator { public: virtual ~IRandomNumberGenerator() noexcept = 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 auto in_range(const uint32_t &a, const uint32_t &b) const noexcept -> uint32_t = 0; }; using IRandomNumberGeneratorFactory = std::shared_ptr (*)(const uint32_t &seed);