aboutsummaryrefslogtreecommitdiff
path: root/rng.h
diff options
context:
space:
mode:
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);
+};