diff options
author | tomsmeding <tom.smeding@gmail.com> | 2016-10-06 20:20:49 +0200 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2016-10-06 20:20:49 +0200 |
commit | 053d2e76ad5848c8d95d7d56bfe7f8a6a324c229 (patch) | |
tree | 0c7c16fc80d00d42913fc24d06f82794c8a6b944 /rng.h | |
parent | 98c5cb7a99222b3dc2d78468bd953a4a4a4142d7 (diff) |
RNG
Diffstat (limited to 'rng.h')
-rw-r--r-- | rng.h | 34 |
1 files changed, 34 insertions, 0 deletions
@@ -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); +}; |