aboutsummaryrefslogtreecommitdiff
path: root/rng.h
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2016-10-06 20:20:49 +0200
committertomsmeding <tom.smeding@gmail.com>2016-10-06 20:20:49 +0200
commit053d2e76ad5848c8d95d7d56bfe7f8a6a324c229 (patch)
tree0c7c16fc80d00d42913fc24d06f82794c8a6b944 /rng.h
parent98c5cb7a99222b3dc2d78468bd953a4a4a4142d7 (diff)
RNG
Diffstat (limited to 'rng.h')
-rw-r--r--rng.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/rng.h b/rng.h
new file mode 100644
index 0000000..105e390
--- /dev/null
+++ b/rng.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <string>
+#include <cstdint>
+
+class Rng{
+public:
+ virtual uint32_t get()=0;
+ virtual uint32_t get_uniform(uint32_t upbound)=0;
+};
+
+class KeyRng : public Rng{
+ uint8_t *key;
+ int keylen;
+ int idx;
+ uint64_t state;
+
+ void stir();
+
+public:
+ KeyRng(const char *key,int keylen);
+ explicit KeyRng(const std::string &key);
+ KeyRng(const Rng&)=delete; //just keep it at one KeyRng please
+ ~KeyRng();
+
+ uint32_t get();
+ uint32_t get_uniform(uint32_t upbound);
+};
+
+class Arc4Rng : public Rng{
+public:
+ uint32_t get();
+ uint32_t get_uniform(uint32_t upbound);
+};