File tree 4 files changed +62
-12
lines changed
4 files changed +62
-12
lines changed Original file line number Diff line number Diff line change 5
5
namespace loophp \phptree \Modifier ;
6
6
7
7
use loophp \phptree \Node \NodeInterface ;
8
+ use loophp \phptree \Traverser \PostOrder ;
9
+ use loophp \phptree \Traverser \TraverserInterface ;
8
10
9
11
/**
10
12
* Class Apply.
@@ -17,22 +19,28 @@ class Apply implements ModifierInterface
17
19
private $ apply ;
18
20
19
21
/**
20
- * Filter constructor.
22
+ * @var \loophp\phptree\Traverser\TraverserInterface|null
23
+ */
24
+ private $ traverser ;
25
+
26
+ /**
27
+ * Apply constructor.
21
28
*
22
29
* @param callable $apply
30
+ * @param \loophp\phptree\Traverser\TraverserInterface|null $traverser
23
31
*/
24
- public function __construct (callable $ apply )
32
+ public function __construct (callable $ apply, ? TraverserInterface $ traverser = null )
25
33
{
26
34
$ this ->apply = $ apply ;
35
+ $ this ->traverser = $ traverser ?? new PostOrder ();
27
36
}
28
37
29
38
/**
30
39
* {@inheritdoc}
31
40
*/
32
41
public function modify (NodeInterface $ tree ): NodeInterface
33
42
{
34
- /** @var \loophp\phptree\Node\MerkleNode $item */
35
- foreach ($ tree ->all () as $ item ) {
43
+ foreach ($ this ->traverser ->traverse ($ tree ) as $ item ) {
36
44
($ this ->apply )($ item );
37
45
}
38
46
Original file line number Diff line number Diff line change 5
5
namespace loophp \phptree \Modifier ;
6
6
7
7
use loophp \phptree \Node \NodeInterface ;
8
+ use loophp \phptree \Traverser \PostOrder ;
9
+ use loophp \phptree \Traverser \TraverserInterface ;
8
10
9
11
/**
10
12
* Class Filter.
@@ -16,23 +18,29 @@ class Filter implements ModifierInterface
16
18
*/
17
19
private $ filter ;
18
20
21
+ /**
22
+ * @var \loophp\phptree\Traverser\PreOrder|\loophp\phptree\Traverser\TraverserInterface
23
+ */
24
+ private $ traverser ;
25
+
19
26
/**
20
27
* Filter constructor.
21
28
*
22
29
* @param callable $filter
30
+ * @param \loophp\phptree\Traverser\TraverserInterface|null $traverser
23
31
*/
24
- public function __construct (callable $ filter )
32
+ public function __construct (callable $ filter, ? TraverserInterface $ traverser = null )
25
33
{
26
34
$ this ->filter = $ filter ;
35
+ $ this ->traverser = $ traverser ?? new PostOrder ();
27
36
}
28
37
29
38
/**
30
39
* {@inheritdoc}
31
40
*/
32
41
public function modify (NodeInterface $ tree ): NodeInterface
33
42
{
34
- /** @var \loophp\phptree\Node\MerkleNode $item */
35
- foreach ($ tree ->all () as $ item ) {
43
+ foreach ($ this ->traverser ->traverse ($ tree ) as $ item ) {
36
44
if (null === $ parent = $ item ->getParent ()) {
37
45
continue ;
38
46
}
Original file line number Diff line number Diff line change 5
5
namespace loophp \phptree \Modifier ;
6
6
7
7
use loophp \phptree \Node \NodeInterface ;
8
+ use loophp \phptree \Traverser \PostOrder ;
9
+ use loophp \phptree \Traverser \TraverserInterface ;
8
10
9
11
/**
10
12
* Class FulfillCapacity.
11
13
*/
12
14
class FulfillCapacity implements ModifierInterface
13
15
{
16
+ /**
17
+ * @var \loophp\phptree\Traverser\PreOrder|\loophp\phptree\Traverser\TraverserInterface
18
+ */
19
+ private $ traverser ;
20
+
21
+ /**
22
+ * FulfillCapacity constructor.
23
+ *
24
+ * @param \loophp\phptree\Traverser\TraverserInterface|null $traverser
25
+ */
26
+ public function __construct (?TraverserInterface $ traverser = null )
27
+ {
28
+ $ this ->traverser = $ traverser ?? new PostOrder ();
29
+ }
30
+
14
31
/**
15
32
* {@inheritdoc}
16
33
*/
17
34
public function modify (NodeInterface $ tree ): NodeInterface
18
35
{
19
- /** @var \loophp\phptree\Node\MerkleNode $item */
20
- foreach ($ tree -> all ( ) as $ item ) {
36
+ /** @var \loophp\phptree\Node\NaryNodeInterface $item */
37
+ foreach ($ this -> traverser -> traverse ( $ tree ) as $ item ) {
21
38
$ capacity = $ item ->capacity ();
22
39
23
40
if (false === $ item ->isLeaf ()) {
Original file line number Diff line number Diff line change 5
5
namespace loophp \phptree \Modifier ;
6
6
7
7
use loophp \phptree \Node \NodeInterface ;
8
+ use loophp \phptree \Traverser \PostOrder ;
9
+ use loophp \phptree \Traverser \TraverserInterface ;
8
10
9
11
/**
10
12
* Class RemoveNullNode.
11
13
*/
12
14
class RemoveNullNode implements ModifierInterface
13
15
{
16
+ /**
17
+ * @var \loophp\phptree\Traverser\PreOrder|\loophp\phptree\Traverser\TraverserInterface
18
+ */
19
+ private $ traverser ;
20
+
21
+ /**
22
+ * RemoveNullNode constructor.
23
+ *
24
+ * @param \loophp\phptree\Traverser\TraverserInterface|null $traverser
25
+ */
26
+ public function __construct (?TraverserInterface $ traverser = null )
27
+ {
28
+ $ this ->traverser = $ traverser ?? new PostOrder ();
29
+ }
30
+
14
31
/**
15
32
* {@inheritdoc}
16
33
*/
17
34
public function modify (NodeInterface $ tree ): NodeInterface
18
35
{
19
- /** @var \loophp\phptree\Node\MerkleNode $item */
20
- foreach ($ tree -> all ( ) as $ item ) {
36
+ /** @var \loophp\phptree\Node\ValueNodeInterface $item */
37
+ foreach ($ this -> traverser -> traverse ( $ tree ) as $ item ) {
21
38
if (null === $ parent = $ item ->getParent ()) {
22
39
continue ;
23
40
}
24
41
25
- if (true ! == $ item ->isLeaf ()) {
42
+ if (false = == $ item ->isLeaf ()) {
26
43
continue ;
27
44
}
28
45
You can’t perform that action at this time.
0 commit comments