Skip to content

Commit d91324f

Browse files
6 moved definitions from Fortune.hpp file into Fortune.cpp source file (#11)
* 6 moved definitions from Fortune.hpp file into Fortune.cpp source file * 6 changed Fortune class into namespace Co-authored-by: Kacu <kacper.kaleta@scythe-studio.com>
1 parent 06bb9cc commit d91324f

File tree

3 files changed

+39
-38
lines changed

3 files changed

+39
-38
lines changed

shm/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ project(SHM)
1010

1111
# set executables
1212
set(THIS_PROJECT_SRC_DIRECTORIES
13+
source/Fortune.cpp
1314
source/Map.cpp
1415
)
1516
set(THIS_PROJECT_TESTS_DIRECTORIES

shm/source/Fortune.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include "Fortune.hpp"
2+
3+
std::random_device randomDevice;
4+
std::mt19937 randomEngine(randomDevice());
5+
6+
int Fortune::getNumber(int first, int last) {
7+
if (first > last) {
8+
std::swap(first, last);
9+
}
10+
std::uniform_int_distribution<int> distribution(first, last);
11+
return distribution(randomEngine);
12+
}
13+
14+
std::vector<int> Fortune::getNumbersEvenlyDistributed(int first, int last, const int n) {
15+
if (n < 1) {
16+
return {};
17+
}
18+
if (first > last) {
19+
std::swap(first, last);
20+
}
21+
std::vector<int> result(n);
22+
for (int i = 0; i < n; ++i) {
23+
int localFirst = (last / n * i) + first;
24+
int localLast = (last / n * (i + 1)) + first;
25+
result.at(i) = (getNumber(localFirst, localLast));
26+
}
27+
return result;
28+
}
29+
30+
void Fortune::shuffle(std::vector<int>& vector) {
31+
std::shuffle(vector.begin(), vector.end(), randomEngine);
32+
}

shm/source/Fortune.hpp

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,10 @@
11
#pragma once
2-
#include <exception>
2+
#include <algorithm>
33
#include <random>
4-
#include <stdexcept>
54
#include <vector>
65

7-
struct Fortune {
8-
static int getNumber(int first, int last) {
9-
const int result = makeRandomNumber(first, last);
10-
if (result < first || result > last) {
11-
throw std::logic_error("Fortune::getNumber(int,int): Result value out of scope");
12-
}
13-
return result;
14-
}
15-
16-
static std::vector<int> getNumbersEvenlyDistributed(int first, int last, const int n) {
17-
if (n < 1) {
18-
return {};
19-
}
20-
std::vector<int> result(n);
21-
for (int i = 0; i < n; ++i) {
22-
int localFirst = (last / n * i) + first;
23-
int localLast = (last / n * (i + 1)) + first;
24-
result.at(i) = (getNumber(localFirst, localLast));
25-
}
26-
return result;
27-
}
28-
29-
static void shuffle(std::vector<int>& vector) {
30-
std::random_device random_device;
31-
std::mt19937 random_engine(random_device());
32-
std::shuffle(vector.begin(), vector.end(), random_engine);
33-
}
34-
35-
private:
36-
static int makeRandomNumber(const int first, const int last) {
37-
std::random_device random_device;
38-
std::mt19937 random_engine(random_device());
39-
std::uniform_int_distribution<int> distribution(first, last);
40-
return distribution(random_engine);
41-
}
42-
};
6+
namespace Fortune {
7+
int getNumber(int first, int last);
8+
std::vector<int> getNumbersEvenlyDistributed(int first, int last, const int n);
9+
void shuffle(std::vector<int>& vector);
10+
}

0 commit comments

Comments
 (0)