summaryrefslogtreecommitdiff
path: root/src/common/mt_rand.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/mt_rand.hpp')
-rw-r--r--src/common/mt_rand.hpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/common/mt_rand.hpp b/src/common/mt_rand.hpp
new file mode 100644
index 0000000..c7bae4e
--- /dev/null
+++ b/src/common/mt_rand.hpp
@@ -0,0 +1,24 @@
+#ifndef MT_RAND_HPP
+#define MT_RAND_HPP
+
+# include "sanity.hpp"
+
+/// Initialize the generator (called automatically with time() if you don't)
+void mt_seed (uint32_t seed);
+/// Get a random number
+uint32_t mt_random (void);
+
+/**
+ * ModuloRand and ModuloPlusRand
+ * These macros are used to replace the vast number of calls to rand()%mod
+ * TODO eliminate the rest of the calls to rand()
+ * MRAND(10) returns 0..9
+ * MPRAND(5,10) returns 5..14
+ */
+// The cast is essential because the result is sometimes
+// compared with a possibly negative number.
+// Because it's using modulus, high numbers shouldn't happen anyway.
+# define MRAND(mod) ((int)(mt_random() % (mod)))
+# define MPRAND(add, mod) ((add) + MRAND(mod))
+
+#endif // MT_RAND_HPP