Passed
Push — main ( 9152fd...203f91 )
by N.
03:37
created

PGenerera::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 5
ccs 0
cts 5
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Klass PGenerera.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Parallellisering;
11
12
/**
13
 * Kontrollera inte nya moduler under parallell exekvering.
14
 */
15
define('GENERERA', true);
16
17
use Tips\Klasser\Preludium;
18
use Tips\Klasser\Spel;
19
use Tips\Klasser\Tips;
20
use Tips\Egenskaper\Varden;
21
22
require_once dirname(__FILE__) . '/../../vendor/autoload.php';
23
new Preludium();
24
25
/**
26
 * Klass PGenerera.
27
 * Generera tipsrader under parallell exekvering.
28
 */
29
final class PGenerera {
30
	use Varden;
31
32
	private Spel $spel;
33
	private Tips $tips;
34
35
	/**
36
	 * Initiera.
37
	 */
38
	public function __construct() {
39
		$this->spel = new Spel();
40
		$this->tips = new Tips($this->spel);
41
		$this->hämta_värden($this->spel->db);
42
		$this->pgenerera();
43
	}
44
45
	/**
46
	 * Parallellisera generering av tipsrader.
47
	 */
48
	private function pgenerera(): void {
49
		$vektorer = extrahera(); // hämta parametrar från querysträng.
50
		$tipsvektor = []; // håll tipsrader i ett fält.
51
52
		/**
53
		 * Bilda en lämplig rymd.
54
		 */
55
		$rymd = $this->bilda_rymd($vektorer);
56
57
		/**
58
		 * Hämta moduldata.
59
		 */
60
		$moduler = $this->hämta_moduler();
61
62
		/**
63
		 * Använd generator för att generera tipsrader.
64
		 * Kontrollera mot varje modulmetod eller fortsätt.
65
		 */
66
		foreach (generera($rymd) as $tipsrad_012) {
67
			foreach ($moduler as $modul) {
68
				if (!method_exists($modul, 'pröva_tipsrad') || !$modul->pröva_tipsrad($tipsrad_012)) {
69
					continue 2;
70
				}
71
			}
72
			$tipsvektor[] = base_convert($tipsrad_012, 3, 36);
73
		}
74
75
		$this->tips->parallellisering->populera_databas(implode(',', $tipsvektor), $vektorer);
76
	}
77
78
	/**
79
	 * Definiera en rymd.
80
	 * Beror av antal trådar, skickade som query.
81
	 * @param int[] $vektorer
82
	 * @return  array<int, int[]>
83
	 */
84
	private function bilda_rymd(array $vektorer): array {
85
		$delrymd = [];
86
		for ($index = 4; $index >= 1; $index--) {
87
			$delrymd[$index] = ($this->trådar >= 3 ** $index) ? [$vektorer[$index - 1]] : TECKENRYMD;
88
		}
89
90
		return [...array_fill(0, MATCHANTAL - 4, TECKENRYMD), ...$delrymd];
91
	}
92
93
	/**
94
	 * Hämta moduler.
95
	 * @return object[]
96
	 */
97
	private function hämta_moduler(): array {
98
		$moduler = [];
99
100
		/**
101
		 * Ladda moduler med en metod för att pröva tipsrader.
102
		 */
103
		foreach ($this->tips->moduler->skarpa_moduler as $modul) {
104
			$klass = "\\Tips\\Moduler\\$modul";
105
			$ny_modul = new $klass($this->tips->utdelning, $this->tips->odds, $this->tips->streck, $this->tips->matcher);
106
			if (method_exists($ny_modul, 'pröva_tipsrad')) {
107
				$moduler[] = $ny_modul;
108
			}
109
		}
110
111
		return $moduler;
112
	}
113
}
114
115
new PGenerera();
116