#pragma once #include "misc_utils.h" #include 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); }