#pragma once #include #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); }