X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnoise.hpp;h=166a60a71058b998d60df732f752259b993beea4;hb=c877ddd21f402381d88a6bebdd5c7c0b4ac28ba9;hp=4c26de92eadf0ae3bacd679cc069e0337bf27861;hpb=e065961dc9af7968d734457ce716231bb51807b7;p=blank.git diff --git a/src/noise.hpp b/src/noise.hpp index 4c26de9..166a60a 100644 --- a/src/noise.hpp +++ b/src/noise.hpp @@ -1,11 +1,40 @@ #ifndef BLANK_NOISE_HPP_ #define BLANK_NOISE_HPP_ +#include +#include #include namespace blank { +class GaloisLFSR { + +public: + // seed should be non-zero + explicit GaloisLFSR(std::uint64_t seed); + + // get the next bit + bool operator ()(); + + template + void operator ()(T &out) { + constexpr int num_bits = + std::numeric_limits::digits + + std::numeric_limits::is_signed; + for (int i = 0; i < num_bits; ++i) { + operator ()(); + } + out = static_cast(state); + } + +private: + std::uint64_t state; + // bits 64, 63, 61, and 60 set to 1 (counting from 1 lo to hi) + static constexpr std::uint64_t mask = 0xD800000000000000; + +}; + /// (3D only) adaptation of Stefan Gustavson's SimplexNoise java class class SimplexNoise {