#include "lichen.h" void li_xorshift32_seed(struct li_xorshift32_t *xor, uint32_t seed) { xor->state = seed ? seed : 1; xor->generator.rand = li_xorshift32; xor->generator.state = &(xor->state); } uint32_t li_xorshift32(void *s) { uint64_t x = *((uint64_t*)s); x ^= x >> 12; x ^= x << 25; x ^= x >> 27; x *= 0x2545F4914F6CDD1DULL; *((uint64_t*)s) = x; // return just top 32 bits return x >> 32; }