lsnes rr2-β24
[lsnes.git] / src / emulation / sky / random.cpp
blob781609b1a7a58060b73697aa0c853b5899ea1281
1 #include "random.hpp"
2 #include <iostream>
3 #include "library/sha256.hpp"
4 #include "library/serialization.hpp"
5 #include "interface/callbacks.hpp"
7 namespace sky
9 random::random()
11 initialized = false;
14 void random::init()
16 memset(state, 0, 32);
17 serialization::u64l(state, ecore_callbacks->get_randomseed());
18 initialized = true;
21 void random::push(uint32_t x)
23 if(!initialized)
24 init();
25 uint8_t buf[4];
26 sha256 h;
27 h.write(state, 32);
28 serialization::u32l(buf, x);
29 h.write(buf, 4);
30 h.read(state);
33 uint32_t random::pull()
35 if(!initialized)
36 init();
37 uint32_t val = serialization::u32l(state);
38 sha256 h;
39 h.write(state, 32);
40 h.read(state);
41 return val;