Completed
Push — master ( 92c84d...185c80 )
by Philippe
02:31
created

NodeTrait   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 2
Bugs 1 Features 1
Metric Value
wmc 10
c 2
b 1
f 1
lcom 1
cbo 2
dl 0
loc 112
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A getPath() 0 4 1
A setPath() 0 5 1
A getMatrix() 0 4 1
A setMatrix() 0 9 2
A getLeft() 0 4 1
A getRight() 0 4 1
A canMove() 0 4 1
A move() 0 14 2
1
<?php
2
/**
3
 * NodeTrait.php
4
 *
5
 * PHP version 5.6+
6
 *
7
 * @author Philippe Gaultier <[email protected]>
8
 * @copyright 2010-2016 Philippe Gaultier
9
 * @license http://www.sweelix.net/license license
10
 * @version XXX
11
 * @link http://www.sweelix.net
12
 * @package sweelix\tree
13
 */
14
15
namespace sweelix\tree;
16
17
/**
18
 * Trait used to handle tree node management
19
 *
20
 * All matrices used are 2x2. The array notation is done like this :
21
 *
22
 *  Matrix | a, b | is written in array [a, b, c, d]
23
 *         | c, d |
24
 *
25
 * @author Philippe Gaultier <[email protected]>
26
 * @copyright 2010-2016 Philippe Gaultier
27
 * @license http://www.sweelix.net/license license
28
 * @version XXX
29
 * @link http://www.sweelix.net
30
 * @package sweelix\tree
31
 * @since XXX
32
 */
33
trait NodeTrait
34
{
35
36
    /**
37
     * @var string node path in dot notation
38
     */
39
    protected $nodePath;
40
41
    /**
42
     * @var array node path in matrix notation
43
     */
44
    protected $nodeMatrix;
45
46
    /**
47
     * @return string node path in dot notation
48
     * @since XXX
49
     */
50
    public function getPath()
51
    {
52
        return $this->nodePath;
53
    }
54
55
    /**
56
     * @param string $path node path in dot notation (1.1.2)
57
     * @return static
58
     * @since XXX
59
     */
60
    public function setPath($path)
61
    {
62
        $this->nodePath = $path;
63
        $this->nodeMatrix = Helper::convertPathToMatrix($path);
0 ignored issues
show
Documentation Bug introduced by
It seems like \sweelix\tree\Helper::convertPathToMatrix($path) of type object<sweelix\tree\Matrix> is incompatible with the declared type array of property $nodeMatrix.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
64
    }
65
66
    /**
67
     * @return array node path in matrix notation
68
     * @since XXX
69
     */
70
    public function getMatrix()
71
    {
72
        return $this->nodeMatrix;
73
    }
74
75
    /**
76
     * Create a node object from a matrix
77
     * @param array $matrix node path in matrix notation [a, b, c, d]
78
     * @return static
79
     * @since XXX
80
     */
81
    public function setMatrix($matrix)
82
    {
83
        if (is_array($matrix) === true) {
84
            $matrix = new Matrix($matrix);
85
        }
86
        $this->nodeMatrix = $matrix;
0 ignored issues
show
Documentation Bug introduced by
It seems like $matrix of type object<sweelix\tree\Matrix> is incompatible with the declared type array of property $nodeMatrix.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
87
        $this->nodePath = Helper::convertMatrixToPath($matrix);
88
89
    }
90
91
    /**
92
     * @return float left border
93
     * @since XXX
94
     */
95
    public function getLeft()
96
    {
97
        return $this->nodeMatrix->a / $this->nodeMatrix->c;
98
    }
99
100
    /**
101
     * @return float right border
102
     * @since XXX
103
     */
104
    public function getRight()
105
    {
106
        return $this->nodeMatrix->b / $this->nodeMatrix->d;
107
    }
108
109
    /**
110
     * Check if we can perform selected move
111
     * @param string $fromPath original Path
112
     * @param string $toPath new Path
113
     * @return bool
114
     * @since XXX
115
     */
116
    public function canMove($fromPath, $toPath)
117
    {
118
        return (strncmp($fromPath, $toPath, strlen($fromPath)) !== 0);
119
    }
120
121
    /**
122
     * Move current node from one path to another
123
     * @param string $fromPath original Path
124
     * @param string $toPath new Path
125
     * @param int $bump offset if we need to re-key the path
126
     * @return boolean
127
     * @since XXX
128
     */
129
    public function move($fromPath, $toPath, $bump = 0)
130
    {
131
        // cannot move into self tree
132
        $status = $this->canMove($fromPath, $toPath);
133
        if($status === true) {
134
            $fromMatrix = Helper::convertPathToMatrix($fromPath);
135
            $toMatrix = Helper::convertPathToMatrix($toPath);
136
            $moveMatrix = Helper::buildMoveMatrix($fromMatrix, $toMatrix, $bump);
137
            $moveMatrix->multiply($this->nodeMatrix);
138
            $this->nodeMatrix = $moveMatrix;
0 ignored issues
show
Documentation Bug introduced by
It seems like $moveMatrix of type object<sweelix\tree\Matrix> is incompatible with the declared type array of property $nodeMatrix.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
139
            $this->nodePath = Helper::convertMatrixToPath($this->nodeMatrix);
140
        }
141
        return $status;
142
    }
143
    
144
}
145