rng/generators/mt19937.h
2025-07-06 17:13:58 +01:00

29 lines
717 B
C++

#pragma once
#include <array>
#include <cstdint>
#include <string>
#include "generator.h"
namespace splat {
std::array<uint32_t, 624> mt19937_init(uint32_t seed);
std::array<uint32_t, 624> mt19937_twist(const std::array<uint32_t, 624>& state);
std::array<uint32_t, 624> mt19937_temper(const std::array<uint32_t, 624>& state);
class mt19937_generator : public PRNG {
public:
explicit mt19937_generator(uint32_t seed);
uint32_t generate();
std::string getName();
private:
std::array<uint32_t, 624> state;
std::array<uint32_t, 624> random_values;
size_t position = 624;
void nextblock();
};
}