doDispatchedSimplification()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
ccs 7
cts 7
cp 1
rs 9.6666
cc 3
eloc 5
nc 3
nop 1
crap 3
1
<?php
2
3
namespace PPP\Module\TreeSimplifier;
4
5
use PPP\DataModel\AbstractNode;
6
7
/**
8
 * Runs NodeSimplifiers as much as possible on the tree.
9
 *
10
 * @licence MIT
11
 * @author Thomas Pellissier Tanon
12
 */
13
class DispatchingSimplifier implements NodeSimplifier {
14
15
	/**
16
	 * @var NodeSimplifier[]
17
	 */
18
	private $simplifiers;
19
20
	/**
21
	 * @param NodeSimplifier[] $simplifiers
22
	 */
23 4
	public function __construct(array $simplifiers = array()) {
24 4
		$this->simplifiers = $simplifiers;
25 4
	}
26
27
	/**
28
	 * @see NodeSimplifier::sSimplifierFor
29
	 */
30 2
	public function isSimplifierFor(AbstractNode $node) {
31 2
		foreach($this->simplifiers as $simplifier) {
32 2
			if($simplifier->isSimplifierFor($node)) {
33 1
				return true;
34
			}
35 1
		}
36
37 1
		return false;
38
	}
39
40
	/**
41
	 * @param AbstractNode $node
42
	 * @return AbstractNode
43
	 */
44 1
	public function simplify(AbstractNode $node) {
45
		do {
46 1
			$oldNode = $node;
47 1
			$node = $this->doDispatchedSimplification($node);
48 1
		} while(!$oldNode->equals($node));
49
50 1
		return $node;
51
	}
52
53 1
	private function doDispatchedSimplification(AbstractNode $node) {
54 1
		foreach($this->simplifiers as $simplifier) {
55 1
			if($simplifier->isSimplifierFor($node)) {
56 1
				$node = $simplifier->simplify($node);
57 1
			}
58 1
		}
59
60 1
		return $node;
61
	}
62
}
63