Cayley
Pseudo-Random Bits from Finite Groups
Cayley.h
Go to the documentation of this file.
1 
4 #ifndef __Cayley__
5 #define __Cayley__
6 
7 #include "PowerTable.h"
8 #include <cinttypes>
9 
23 
24 class CCayley{
25  protected:
26  uint32_t m_nSize = 0;
27 
28  uint32_t m_nOrder = 0;
30  CPerm* m_pCurPerm = nullptr;
31 
32  static const int m_nDelay = 32;
33 
34  uint64_t m_nDelayLine[m_nDelay] = {
35  0x57ea5e79bb7b58dc, 0x03198e239ff8ba7d,
36  0x7779bd2aeb666379, 0x5de2cf0e048781c3,
37  0x89faeceacabe7821, 0xbf5a9b43b4e550ae,
38  0x24e37a696814c67e, 0x45e199269f6ad385,
39  0xf1df54ec42d8fba8, 0x089f41735277a11d,
40  0x602c3888033edae0, 0xc71fee188d41a646,
41  0x379121f47085af73, 0x9419d15d410b8eeb,
42  0x760744f26b4c05b0, 0x3c68c1fb83c9a47e,
43  0xa10d29f01e2f225e, 0x39792d6f9700f5cb,
44  0xf5016c43b32d066c, 0x692d0a2cbcc083c0,
45  0x229bfc31ea3beeff, 0xe9e6fd8bbf4033b8,
46  0x74e8c4ad7bd95bd0, 0xeedb9cede270c79b,
47  0x9abd1906822b22ac, 0x3b57c6458e330f89,
48  0x7fc8519dfd26353d, 0x2874406cd5a54ba0,
49  0x9fe7daf93fe577a2, 0x83d1c7bb3d29cd1f,
50  0xbb2d2cbb68483f3d, 0x39af233d402946ec
51  };
52 
53  int m_nTail = 0;
54 
55  void ChooseGenerators(uint64_t (*rnd)(void));
56  void NextPerm();
57 
58  public:
59  CCayley(uint32_t n);
60  ~CCayley();
61 
62  virtual void srand(uint64_t (*rnd)(void));
63 
64  CPerm GetGenerator(int i) const;
65  const CPerm& GetPerm() const;
66  const uint32_t GetSize() const;
67 }; //CCayley
68 
69 #endif
Declaration of the power table class CPowerTable.
const CPerm & GetPerm() const
Get current permutation.
Definition: Cayley.cpp:109
void ChooseGenerators(uint64_t(*rnd)(void))
Choose generators.
Definition: Cayley.cpp:68
CPerm * m_pCurPerm
Current permutation.
Definition: Cayley.h:30
uint32_t m_nOrder
Order of generators.
Definition: Cayley.h:28
uint32_t m_nSize
Size of permutations.
Definition: Cayley.h:26
void NextPerm()
Compute next permutation.
Definition: Cayley.cpp:128
CPerm GetGenerator(int i) const
Get generator.
Definition: Cayley.cpp:57
Permutation.
Definition: Permutation.h:20
int m_nTail
Index of last element in delay line.
Definition: Cayley.h:53
CCayley(uint32_t n)
Constructor.
Definition: Cayley.cpp:39
const uint32_t GetSize() const
Get permutation size.
Definition: Cayley.cpp:117
Table of all powers of a permutation.
Definition: PowerTable.h:17
CPowerTable m_nPower[2]
Power tables for a pair of generators.
Definition: Cayley.h:29
virtual void srand(uint64_t(*rnd)(void))
Seed the generator.
Definition: Cayley.cpp:101
static const int m_nDelay
Delay size.
Definition: Cayley.h:32
~CCayley()
Destructor.
Definition: Cayley.cpp:49
The Cayley PRNG.
Definition: Cayley.h:24
uint64_t m_nDelayLine[m_nDelay]
Delay line.
Definition: Cayley.h:34