parent
3ff3db0e3e
commit
d9e34e7e70
@ -0,0 +1,31 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
namespace rng
|
||||||
|
{
|
||||||
|
template<typename T>
|
||||||
|
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<sm128>
|
||||||
|
{
|
||||||
|
splitmix64(u64 i);
|
||||||
|
|
||||||
|
sm128 generate_seed() override;
|
||||||
|
private:
|
||||||
|
sm128r m_state;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +0,0 @@
|
|||||||
#include <rngxx.hpp>
|
|
||||||
|
|
||||||
//XXX: Doing this is not going to work ...
|
|
||||||
#if 0
|
|
||||||
void t(Random& r)
|
|
||||||
{
|
|
||||||
for(auto&& i : r.iter<int>()) (void)i;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
|||||||
|
#include <seed.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
// TODO: XXX: how to return a god damn array without typedef ffs????
|
||||||
|
extern u64 (*sm64_compute[2])(u64, u64);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace rng::seed
|
||||||
|
{
|
||||||
|
splitmix64::splitmix64(u64 u) : m_state(sm64_compute(u, 0)){}
|
||||||
|
|
||||||
|
sm128 splitmix64::generate_seed() { return sm128 { m_state = sm64_compute(m_state[0], m_state[1]) }; }
|
||||||
|
}
|
Loading…
Reference in new issue