fzy
terminal fuzzy finder picker
git clone https://9o.is/git/fzy.git
theft_mt.h
(1073B)
1 #ifndef THEFT_MT_H
2 #define THEFT_MT_H
3
4 #include <stdint.h>
5
6 /* Wrapper for Mersenne Twister.
7 * See copyright and license in theft_mt.c, more details at:
8 * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
9 *
10 * The code has been modified to store internal state in heap/stack
11 * allocated memory, rather than statically allocated memory, to allow
12 * multiple instances running in the same address space. */
13
14 #define THEFT_MT_PARAM_N 312
15
16 struct theft_mt {
17 uint64_t mt[THEFT_MT_PARAM_N]; /* the array for the state vector */
18 int16_t mti;
19 };
20
21 /* Heap-allocate a mersenne twister struct. */
22 struct theft_mt *theft_mt_init(uint64_t seed);
23
24 /* Free a heap-allocated mersenne twister struct. */
25 void theft_mt_free(struct theft_mt *mt);
26
27 /* Reset a mersenne twister struct, possibly stack-allocated. */
28 void theft_mt_reset(struct theft_mt *mt, uint64_t seed);
29
30 /* Get a 64-bit random number. */
31 uint64_t theft_mt_random(struct theft_mt *mt);
32
33 /* Generate a random number on [0,1]-real-interval. */
34 double theft_mt_random_double(struct theft_mt *mt);
35
36 #endif