summaryrefslogtreecommitdiffhomepage
path: root/src/math/rodeo_rng.c
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-06-16 01:18:13 -0400
committerrealtradam <[email protected]>2023-06-16 01:18:13 -0400
commita47cc44ef7191d03f8ca1b8d4e6b9dd34fba1807 (patch)
treef7e358545f5043df20695d0cf51dcf8caa10cb12 /src/math/rodeo_rng.c
parent425516a9c53183179c43517f1b6501a790378a05 (diff)
downloadRodeoKit-a47cc44ef7191d03f8ca1b8d4e6b9dd34fba1807.tar.gz
RodeoKit-a47cc44ef7191d03f8ca1b8d4e6b9dd34fba1807.zip
matrix math wrapper as well as various refactors for consistant and cleaner code
Diffstat (limited to 'src/math/rodeo_rng.c')
-rw-r--r--src/math/rodeo_rng.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/math/rodeo_rng.c b/src/math/rodeo_rng.c
new file mode 100644
index 0000000..bf94e0b
--- /dev/null
+++ b/src/math/rodeo_rng.c
@@ -0,0 +1,81 @@
+
+// internal
+// public
+#include "rodeo/math/rng.h"
+// private
+#include "math/irodeo_rng_t.h"
+
+// external
+#include "stc/crand.h"
+#include "SDL.h"
+
+// system
+#include <inttypes.h>
+
+void
+rodeo_math_rng_init(void)
+{
+ csrand(SDL_GetTicks64());
+}
+
+void
+rodeo_math_rng_deinit(void)
+{
+ // no need to do anything
+}
+
+rodeo_math_rng_generator_t
+rodeo_math_rng_generator_create(uint64_t seed)
+{
+ rodeo_math_rng_generator_t result = {
+ .seed = seed,
+ .data = malloc(sizeof(*(rodeo_math_rng_generator_t){0}.data))
+ };
+ result.data->crand = crand_init(seed);
+ return result;
+}
+
+void
+rodeo_math_rng_generator_destroy(rodeo_math_rng_generator_t generator)
+{
+ free(generator.data);
+}
+
+double
+rodeo_math_rng_double_get(rodeo_math_rng_generator_t generator)
+{
+ if(generator.seed == 0)
+ {
+ return crandf();
+ }
+ else
+ {
+ return crand_f64(&generator.data->crand);
+ }
+}
+
+float
+rodeo_math_rng_float_get(rodeo_math_rng_generator_t generator)
+{
+ return (float)rodeo_math_rng_double_get(generator);
+}
+
+uint64_t
+rodeo_math_rng_uint64_get(rodeo_math_rng_generator_t generator)
+{
+ if(generator.seed == 0)
+ {
+ return crand();
+ }
+ else
+ {
+ return crand_u64(&generator.data->crand);
+ }
+}
+
+uint32_t
+rodeo_math_rng_uint32_get(rodeo_math_rng_generator_t generator)
+{
+ return (uint32_t)rodeo_math_rng_uint64_get(generator);
+}
+