libcute 0.1
Loading...
Searching...
No Matches
state.h
Go to the documentation of this file.
1#pragma once
2
5#include <stdint.h>
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
12typedef uint32_t (*cu_State_NextFn)(void *ctx);
13
15typedef struct {
16 void *ctx;
18} cu_State;
19
26uint32_t cu_random_seed(void);
27
29typedef struct {
30 uint32_t value;
32
33static inline uint32_t cu_RandomState_next(void *ctx) {
34 cu_RandomState *st = (cu_RandomState *)ctx;
35 st->value = st->value * 1664525u + 1013904223u;
36 return st->value;
37}
38
39static inline cu_State cu_RandomState_init(
40 cu_RandomState *impl, uint32_t seed) {
41 impl->value = seed;
42 cu_State st = {impl, cu_RandomState_next};
43 return st;
44}
45
47static inline cu_State cu_RandomState_new(cu_RandomState *impl) {
48 return cu_RandomState_init(impl, cu_random_seed());
49}
50
51static inline uint32_t cu_State_next(cu_State *st) { return st->next(st->ctx); }
52
53#ifdef __cplusplus
54}
55#endif
uint32_t(* cu_State_NextFn)(void *ctx)
Definition state.h:12
uint32_t cu_random_seed(void)
Definition state.c:12
Definition state.h:29
Definition state.h:15
void * ctx
Definition state.h:16
cu_State_NextFn next
Definition state.h:17