35 lines
649 B
C

#pragma once
#include <stdint.h>
#include "misc_utils.h"
typedef struct {
uint32_t state;
} RandomEngine;
static void RandomEngine_init(RandomEngine* self) {
self->state = 0x6d2b79f5u;
}
static uint32_t RandomEngine_rnd(RandomEngine* self) {
uint32_t x = self->state;
if (x == 0) {
x = 0x6d2b79f5u;
}
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
x = x * 1664525u + 1013904223u;
self->state = x;
return x;
}
static uint32_t RandomEngine_rnd_interval(
RandomEngine* self, uint32_t from, uint32_t until) {
check(from < until);
return from + RandomEngine_rnd(self) % (until - from);
}