DispatchingSimplifier::simplify()   A
last analyzed

Complexity

Conditions 2
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 9.4285
cc 2
eloc 6
nc 1
nop 1
crap 2
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