#pragma once #include #include "internal/seed.h" namespace rng { struct sm64 final : public Random { inline sm64() : m_generator(seed::splitmix64::random()){} inline sm64(const seed::splitmix64& g) : m_generator(g){} explicit inline sm64(seed_gen& generator) : m_generator(generator){} inline sm64(u64 seed) : Random(), m_generator(seed){} RNG_OVERRIDE(inline u64, next_u64, ()) { return m_generator.generate_seed(); } protected: inline f64 _sample() override { return m_generator.generate_f64(); } private: seed::splitmix64 m_generator; }; }