EHS
PRNG.h
Go to the documentation of this file.
1#pragma once
2
3#include "EHS.h"
4
5namespace ehs
6{
7 template<typename T>
8 class PRNG
9 {
10 private:
11 T seed;
12 T last;
13
14 public:
16 : seed(0), last(0)
17 {
18 }
19
20 PRNG(const T seed)
21 : seed(seed), last(seed)
22 {
23 }
24
25 PRNG(const PRNG& prng)
26 : seed(prng.seed), last(prng.last)
27 {
28 }
29
30 PRNG& operator=(const PRNG& prng)
31 {
32 if (this == &prng)
33 return *this;
34
35 seed = prng.seed;
36 last = prng.last;
37
38 return *this;
39 }
40
41 T Generate(const T min, const T max)
42 {
43 return Generate() % (max - min) + min;
44 }
45
47 {
48 return ((last = last * (T)214013 + (T)2531011) >> 16) & (T)0x7fff;
49 }
50 };
51
60}
Definition: PRNG.h:9
PRNG()
Definition: PRNG.h:15
PRNG(const PRNG &prng)
Definition: PRNG.h:25
PRNG & operator=(const PRNG &prng)
Definition: PRNG.h:30
T Generate()
Definition: PRNG.h:46
T Generate(const T min, const T max)
Definition: PRNG.h:41
PRNG(const T seed)
Definition: PRNG.h:20
Definition: Anchor.h:6
PRNG< UInt_16 > PRNG_u16
Definition: PRNG.h:57
PRNG< UInt_32 > PRNG_u32
Definition: PRNG.h:55
PRNG< SInt_32 > PRNG_s32
Definition: PRNG.h:54
PRNG< SInt_16 > PRNG_s16
Definition: PRNG.h:56
PRNG< UInt_8 > PRNG_u8
Definition: PRNG.h:59
PRNG< SInt_64 > PRNG_s64
Definition: PRNG.h:52
PRNG< SInt_8 > PRNG_s8
Definition: PRNG.h:58
PRNG< UInt_64 > PRNG_u64
Definition: PRNG.h:53