1 | <?php |
||
10 | final class CartesianDestinationGenerator implements DestinationGenerator |
||
11 | { |
||
12 | /** {@inheritdoc} */ |
||
13 | 6 | public function generate($route, array $sources, array $fillers = []) |
|
28 | |||
29 | /** {@inheritdoc} */ |
||
30 | 1 | public function count(array $sources) |
|
31 | { |
||
32 | 1 | if (count($sources) === 0) { |
|
33 | return 0; |
||
34 | } |
||
35 | |||
36 | 1 | $count = 1; |
|
37 | 1 | foreach ($sources as $source) { |
|
38 | 1 | $count *= $source->count(); |
|
39 | 1 | } |
|
40 | |||
41 | 1 | return $count; |
|
42 | } |
||
43 | |||
44 | /** |
||
45 | * Returns cartesian product of sources |
||
46 | * |
||
47 | * @param SourceInterface[] $sources |
||
48 | * |
||
49 | * @return array |
||
50 | */ |
||
51 | 6 | private function cartesian($sources) |
|
70 | |||
71 | /** |
||
72 | * @param SourceFiller[] $fillers |
||
73 | * |
||
74 | * @throws DestinationException |
||
75 | */ |
||
76 | 6 | private function validateFillerCircularity(array $fillers) |
|
83 | |||
84 | /** |
||
85 | * @param SourceFiller $filler |
||
86 | * @param SourceFiller[] $fillers |
||
87 | * @param string[] $visited |
||
88 | * |
||
89 | * @throws DestinationException |
||
90 | */ |
||
91 | 4 | private function visitFiller(SourceFiller $filler, array $fillers, array &$visited) |
|
106 | |||
107 | /** |
||
108 | * @param array[] $items |
||
109 | * @param SourceFiller[] $fillers |
||
110 | * |
||
111 | * @return array |
||
112 | * @throws DestinationException |
||
113 | */ |
||
114 | 5 | private function infer(array $items, array $fillers) |
|
124 | |||
125 | /** |
||
126 | * @param array $item |
||
127 | * @param string $code |
||
128 | * @param SourceFiller[] $fillers |
||
129 | * |
||
130 | * @return array |
||
131 | * |
||
132 | * @throws DestinationException |
||
133 | */ |
||
134 | 3 | private function inferCode(array $item, $code, array $fillers) |
|
150 | } |
||
151 |