#ifndef BLUELIB_RANDOM_H_ #define BLUELIB_RANDOM_H_ #include #include struct b_random_algorithm; typedef enum b_random_flags { /* algorithm selection */ B_RANDOM_MT19937 = 0x01u, /* generation flags */ B_RANDOM_SECURE = 0x100u, } b_random_flags; typedef struct b_random_ctx { b_random_flags __f; struct b_random_algorithm *__a; union { struct { unsigned long long mt[312]; size_t mti; } __mt19937; }; } b_random_ctx; BLUE_API b_random_ctx *b_random_global_ctx(void); BLUE_API b_status b_random_init(b_random_ctx *ctx, b_random_flags flags); BLUE_API unsigned long long b_random_next_int64(b_random_ctx *ctx); BLUE_API double b_random_next_double(b_random_ctx *ctx); BLUE_API void b_random_next_bytes( b_random_ctx *ctx, unsigned char *out, size_t nbytes); #endif