#pragma once #include "common.h" namespace rng { template struct seed_gen { virtual T generate_seed() = 0; inline virtual ~seed_gen(){} }; namespace seed { typedef u64 sm128r[2]; struct sm128 { sm128r m_raw; }; struct splitmix64 : public virtual seed_gen { splitmix64(u64 i); sm128 generate_seed() override; private: sm128r m_state; }; } }