MinLCA algorithms
random-graph.hh
Go to the documentation of this file.
1 #ifndef __MINLCA_UTILS_GENERATORS_RANDOM_HH
2 #define __MINLCA_UTILS_GENERATORS_RANDOM_HH
3 
4 #include <lemon/random.h>
5 
8 
9 namespace minlca
10 {
11 namespace utils
12 {
13 
15 template<typename Graph = lemon::SmartGraph>
16 class RandomGraph : public Graph
17 {
18 protected:
19  lemon::Random *_r;
21 
22 public:
24  template<typename Number = int>
26  Number seed = 0
27  ) : Graph(), _r(nullptr), _delete_random(true)
28  {
29  _r = new lemon::Random(seed);
30  }
31 
34  lemon::Random &r
35  ) : Graph(), _r(&r), _delete_random(false)
36  {
37  }
38 
44  {
45  if (_delete_random) {
46  delete _r;
47  }
48  }
49 
55  template<typename Number>
56  void seed(
57  Number seed
58  )
59  {
60  if (not _delete_random) {
61  _r = new lemon::Random(seed);
62  _delete_random = true;
63  }
64  else {
65  _r->seed(seed);
66  }
67  }
68 
71  lemon::Random &r
72  )
73  {
74  if (_delete_random) {
75  delete _r;
76  }
77 
78  _r = &r;
79  _delete_random = false;
80  }
81 
83  virtual void generate() = 0;
84 };
85 }
86 }
87 
88 #endif
lemon::Random * _r
Random number generator.
Definition: random-graph.hh:19
void seed(Number seed)
Change the random number generator seed.
Definition: random-graph.hh:56
RandomGraph(lemon::Random &r)
Constructor with custom random number generator.
Definition: random-graph.hh:33
virtual void generate()=0
Generate graph.
Default namespace Default namespace for MinLCA algorithms.
Definition: base.hh:15
RandomGraph(Number seed=0)
Constructor with seed.
Definition: random-graph.hh:25
void changeRandom(lemon::Random &r)
Change the random number generator.
Definition: random-graph.hh:70
bool _delete_random
Delete the random number generator in destructor.
Definition: random-graph.hh:20
Base class for random graph generators.
Definition: random-graph.hh:16