fixed memory leaks
This commit is contained in:
parent
4222c3ebf6
commit
bbeb6bea1d
@ -12,11 +12,13 @@ extern "C" {
|
|||||||
/*
|
/*
|
||||||
You can choose any algorithm that has required functions:
|
You can choose any algorithm that has required functions:
|
||||||
|
|
||||||
some_alg32_state some_alg32_init(uint32 seed);
|
some_alg32_statePtr some_alg32_init(uint32 seed);
|
||||||
uint32 some_alg32_next(some_alg32_state);
|
uint32 some_alg32_next(some_alg32_statePtr);
|
||||||
|
void some_alg32_free(some_alg32_statePtr);
|
||||||
|
|
||||||
#define KRAND_ALG32_next some_alg32_next
|
|
||||||
#define KRAND_ALG32_init some_alg32_init
|
#define KRAND_ALG32_init some_alg32_init
|
||||||
|
#define KRAND_ALG32_next some_alg32_next
|
||||||
|
#define KRAND_ALG32_free some_alg32_free
|
||||||
#include "kerep/random/krandom.h"
|
#include "kerep/random/krandom.h"
|
||||||
|
|
||||||
The same way it works for 64-bit RNGs
|
The same way it works for 64-bit RNGs
|
||||||
@ -29,12 +31,18 @@ The same way it works for 64-bit RNGs
|
|||||||
#ifndef KRAND_ALG32_init
|
#ifndef KRAND_ALG32_init
|
||||||
#define KRAND_ALG32_init xoshiro128plus##_init
|
#define KRAND_ALG32_init xoshiro128plus##_init
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef KRAND_ALG32_free
|
||||||
|
#define KRAND_ALG32_free xoshiro128plus##_free
|
||||||
|
#endif
|
||||||
#ifndef KRAND_ALG64_next
|
#ifndef KRAND_ALG64_next
|
||||||
#define KRAND_ALG64_next xoshiro256plus##_next
|
#define KRAND_ALG64_next xoshiro256plus##_next
|
||||||
#endif
|
#endif
|
||||||
#ifndef KRAND_ALG64_init
|
#ifndef KRAND_ALG64_init
|
||||||
#define KRAND_ALG64_init xoshiro256plus##_init
|
#define KRAND_ALG64_init xoshiro256plus##_init
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef KRAND_ALG64_free
|
||||||
|
#define KRAND_ALG64_free xoshiro256plus##_free
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef void* krand_statePtr;
|
typedef void* krand_statePtr;
|
||||||
#define KRAND_ALG32_initFromTime xoshiro128plus##_initFromTime
|
#define KRAND_ALG32_initFromTime xoshiro128plus##_initFromTime
|
||||||
|
|||||||
@ -13,6 +13,9 @@ splitmix64_statePtr splitmix64_init(uint64 seed);
|
|||||||
static inline splitmix64_statePtr splitmix64_initFromTime(void) { return splitmix64_init(time(NULL)); }
|
static inline splitmix64_statePtr splitmix64_initFromTime(void) { return splitmix64_init(time(NULL)); }
|
||||||
|
|
||||||
uint64 splitmix64_next(splitmix64_statePtr);
|
uint64 splitmix64_next(splitmix64_statePtr);
|
||||||
|
static inline void splitmix64_free(splitmix64_statePtr state) {
|
||||||
|
free(state);
|
||||||
|
}
|
||||||
|
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,12 @@ static inline xoroshiro64_statePtr xoroshiro64_initFromTime(void) { return xoros
|
|||||||
uint32 xoroshiro64star_next(xoroshiro64_statePtr);
|
uint32 xoroshiro64star_next(xoroshiro64_statePtr);
|
||||||
uint32 xoroshiro64starstar_next(xoroshiro64_statePtr);
|
uint32 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
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -44,5 +44,6 @@ void* xoroshiro64_init(uint64 seed){
|
|||||||
xoroshiro64_state* state=malloc(sizeof(xoroshiro64_state));
|
xoroshiro64_state* state=malloc(sizeof(xoroshiro64_state));
|
||||||
splitmix64_state* splitmix=splitmix64_init(seed);
|
splitmix64_state* splitmix=splitmix64_init(seed);
|
||||||
state->merged=splitmix64_next(splitmix);
|
state->merged=splitmix64_next(splitmix);
|
||||||
|
splitmix64_free(splitmix);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,13 @@ uint64 xoroshiro128plus_next(xoroshiro128_statePtr);
|
|||||||
uint64 xoroshiro128plusplus_next(xoroshiro128_statePtr);
|
uint64 xoroshiro128plusplus_next(xoroshiro128_statePtr);
|
||||||
uint64 xoroshiro128starstar_next(xoroshiro128_statePtr);
|
uint64 xoroshiro128starstar_next(xoroshiro128_statePtr);
|
||||||
|
|
||||||
|
static inline void xoroshiro128_free(xoroshiro128_statePtr state) {
|
||||||
|
free(state);
|
||||||
|
}
|
||||||
|
#define xoroshiro128plus_free xoroshiro128_free
|
||||||
|
#define xoroshiro128plusplus_free xoroshiro128_free
|
||||||
|
#define xoroshiro128starstar_free xoroshiro128_free
|
||||||
|
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -54,5 +54,6 @@ void* xoroshiro128_init(uint64 seed){
|
|||||||
splitmix64_state* splitmix=splitmix64_init(seed);
|
splitmix64_state* splitmix=splitmix64_init(seed);
|
||||||
state->s[0]=splitmix64_next(splitmix);
|
state->s[0]=splitmix64_next(splitmix);
|
||||||
state->s[1]=splitmix64_next(splitmix);
|
state->s[1]=splitmix64_next(splitmix);
|
||||||
|
splitmix64_free(splitmix);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,13 @@ uint32 xoshiro128plus_next(xoshiro128_statePtr);
|
|||||||
uint32 xoshiro128plusplus_next(xoshiro128_statePtr);
|
uint32 xoshiro128plusplus_next(xoshiro128_statePtr);
|
||||||
uint32 xoshiro128starstar_next(xoshiro128_statePtr);
|
uint32 xoshiro128starstar_next(xoshiro128_statePtr);
|
||||||
|
|
||||||
|
static inline void xoshiro128_free(xoshiro128_statePtr state) {
|
||||||
|
free(state);
|
||||||
|
}
|
||||||
|
#define xoshiro128plus_free xoshiro128_free
|
||||||
|
#define xoshiro128plusplus_free xoshiro128_free
|
||||||
|
#define xoshiro128starstar_free xoshiro128_free
|
||||||
|
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -49,5 +49,6 @@ void* xoshiro128_init(uint64 seed){
|
|||||||
splitmix64_state* splitmix=splitmix64_init(seed);
|
splitmix64_state* splitmix=splitmix64_init(seed);
|
||||||
state->merged[0]=splitmix64_next(splitmix);
|
state->merged[0]=splitmix64_next(splitmix);
|
||||||
state->merged[1]=splitmix64_next(splitmix);
|
state->merged[1]=splitmix64_next(splitmix);
|
||||||
|
splitmix64_free(splitmix);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,13 @@ uint64 xoshiro256plus_next(xoshiro256_statePtr);
|
|||||||
uint64 xoshiro256plusplus_next(xoshiro256_statePtr);
|
uint64 xoshiro256plusplus_next(xoshiro256_statePtr);
|
||||||
uint64 xoshiro256starstar_next(xoshiro256_statePtr);
|
uint64 xoshiro256starstar_next(xoshiro256_statePtr);
|
||||||
|
|
||||||
|
static inline void xoshiro256_free(xoshiro256_statePtr state) {
|
||||||
|
free(state);
|
||||||
|
}
|
||||||
|
#define xoshiro256plus_free xoshiro256_free
|
||||||
|
#define xoshiro256plusplus_free xoshiro256_free
|
||||||
|
#define xoshiro256starstar_free xoshiro256_free
|
||||||
|
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -53,5 +53,6 @@ void* xoshiro256_init(uint64 seed){
|
|||||||
state->s[1]=splitmix64_next(splitmix);
|
state->s[1]=splitmix64_next(splitmix);
|
||||||
state->s[2]=splitmix64_next(splitmix);
|
state->s[2]=splitmix64_next(splitmix);
|
||||||
state->s[3]=splitmix64_next(splitmix);
|
state->s[3]=splitmix64_next(splitmix);
|
||||||
|
splitmix64_free(splitmix);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,13 +8,15 @@
|
|||||||
uint##VALUE_SIZE r=ALG##_next(s);\
|
uint##VALUE_SIZE r=ALG##_next(s);\
|
||||||
printf("\e[97m next from zero seed:");\
|
printf("\e[97m next from zero seed:");\
|
||||||
if(r!=EXPECTED_FROM_ZERO){\
|
if(r!=EXPECTED_FROM_ZERO){\
|
||||||
printf("\e[91m %llu\n", (uint64)r);\
|
printf("\e[91m " IFWIN("%llu\n","%lu\n"), (uint64)r);\
|
||||||
throw(ERR_UNEXPECTEDVAL);\
|
throw(ERR_UNEXPECTEDVAL);\
|
||||||
}\
|
}\
|
||||||
printf("\e[92m %llu\n", (uint64)r);\
|
printf("\e[92m " IFWIN("%llu\n","%lu\n"), (uint64)r);\
|
||||||
|
ALG##_free(s);\
|
||||||
s= ALG##_initFromTime();\
|
s= ALG##_initFromTime();\
|
||||||
r=ALG##_next(s);\
|
r=ALG##_next(s);\
|
||||||
printf("\e[97m next from time seed:\e[92m %llu\n", (uint64)r);\
|
ALG##_free(s);\
|
||||||
|
printf("\e[97m next from time seed:\e[92m " IFWIN("%llu\n","%lu\n"), (uint64)r);\
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_rng_algorithms(){
|
void test_rng_algorithms(){
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user