#define FIO_RAND_H
#include <inttypes.h>
+#include <assert.h>
+#include "types.h"
#include "../arch/arch.h"
#define FRAND32_MAX (-1U)
};
};
-struct frand64_state {
- uint64_t s1, s2, s3, s4, s5;
-};
-
static inline uint64_t rand_max(struct frand_state *state)
{
if (state->use64)
}
}
-extern void init_rand(struct frand_state *, int);
-extern void init_rand_seed(struct frand_state *, unsigned int seed, int);
+/*
+ * Generate a random value between 'start' and 'end', both inclusive
+ */
+static inline int rand32_between(struct frand_state *state, int start, int end)
+{
+ uint32_t r;
+
+ assert(!state->use64);
+
+ r = __rand32(&state->state32);
+ return start + (int) ((double)end * (r / (FRAND32_MAX + 1.0)));
+}
+
+extern void init_rand(struct frand_state *, bool);
+extern void init_rand_seed(struct frand_state *, unsigned int seed, bool);
extern void __fill_random_buf(void *buf, unsigned int len, unsigned long seed);
extern unsigned long fill_random_buf(struct frand_state *, void *buf, unsigned int len);
extern void __fill_random_buf_percentage(unsigned long, void *, unsigned int, unsigned int, unsigned int, char *, unsigned int);