diff options
| author | realtradam <[email protected]> | 2023-06-16 01:18:13 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-06-16 01:18:13 -0400 |
| commit | a47cc44ef7191d03f8ca1b8d4e6b9dd34fba1807 (patch) | |
| tree | f7e358545f5043df20695d0cf51dcf8caa10cb12 /src/math/rodeo_rng.c | |
| parent | 425516a9c53183179c43517f1b6501a790378a05 (diff) | |
| download | RodeoKit-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.c | 81 |
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); +} + |
