35 lines
918 B
C
35 lines
918 B
C
#pragma once
|
|
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "../../../base/std.h"
|
|
#include "../../splitmix64/splitmix64.h"
|
|
|
|
typedef union {
|
|
u64 merged;
|
|
u32 s[2];
|
|
} xoroshiro64_state;
|
|
typedef void* xoroshiro64_statePtr;
|
|
|
|
xoroshiro64_statePtr xoroshiro64_init(u64 seed);
|
|
#define xoroshiro64star_init xoroshiro64_init
|
|
#define xoroshiro64starstar_init xoroshiro64_init
|
|
|
|
static inline xoroshiro64_statePtr xoroshiro64_initFromTime(void) { return xoroshiro64_init(time(NULL)); }
|
|
#define xoroshiro64star_initFromTime xoroshiro64_initFromTime
|
|
#define xoroshiro64starstar_initFromTime xoroshiro64_initFromTime
|
|
|
|
u32 xoroshiro64star_next(xoroshiro64_statePtr);
|
|
u32 xoroshiro64starstar_next(xoroshiro64_statePtr);
|
|
|
|
static inline void xoroshiro64_free(xoroshiro64_statePtr state) {
|
|
free(state);
|
|
}
|
|
#define xoroshiro64star_free xoroshiro64_free
|
|
#define xoroshiro64starstar_free xoroshiro64_free
|
|
|
|
#if __cplusplus
|
|
}
|
|
#endif |