dncurrency/nano/node/xorshift.hpp
Wesley Shillingford dd8a810f2b
Various minor coding style updates (#1863)
* Various coding style updates

* Remove unnecessary change to blocks.cpp

* Formatting

* Re-add necessary node_config default constructor
2019-03-26 13:25:47 +00:00

24 lines
385 B
C++

#pragma once
#include <array>
namespace nano
{
class xorshift1024star final
{
public:
std::array<uint64_t, 16> s;
unsigned p{ 0 };
uint64_t next ()
{
auto p_l (p);
auto pn ((p_l + 1) & 15);
p = pn;
uint64_t s0 = s[p_l];
uint64_t s1 = s[pn];
s1 ^= s1 << 31; // a
s1 ^= s1 >> 11; // b
s0 ^= s0 >> 30; // c
return (s[pn] = s0 ^ s1) * 1181783497276652981LL;
}
};
}