38 lines
823 B
C
38 lines
823 B
C
#ifndef BLUELIB_RANDOM_H_
|
|
#define BLUELIB_RANDOM_H_
|
|
|
|
#include <blue/core/status.h>
|
|
#include <stddef.h>
|
|
|
|
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
|