Passed
Push — behat ( a74de5...4872f1 )
by Doug
02:39
created

PackedItem   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 144
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
lcom 1
cbo 1
dl 0
loc 144
ccs 0
cts 34
cp 0
rs 10
c 1
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
A getX() 0 4 1
A getY() 0 4 1
A getZ() 0 4 1
A getItem() 0 4 1
A getWidth() 0 4 1
A getLength() 0 4 1
A getDepth() 0 4 1
A fromOrientatedItem() 0 12 1
A toOrientatedItem() 0 4 1
1
<?php
2
/**
3
 * Box packing (3D bin packing, knapsack problem).
4
 *
5
 * @author Doug Wright
6
 */
7
declare(strict_types=1);
8
9
namespace DVDoug\BoxPacker;
10
11
/**
12
 * A packed item.
13
 *
14
 * @author Doug Wright
15
 */
16
class PackedItem
17
{
18
    /**
19
     * @var int
20
     */
21
    protected $x;
22
23
    /**
24
     * @var int
25
     */
26
    protected $y;
27
28
    /**
29
     * @var int
30
     */
31
    protected $z;
32
33
    /**
34
     * @var Item
35
     */
36
    protected $item;
37
38
    /**
39
     * @var int
40
     */
41
    protected $width;
42
43
    /**
44
     * @var int
45
     */
46
    protected $length;
47
48
    /**
49
     * @var int
50
     */
51
    protected $depth;
52
53
    /**
54
     * PackedItem constructor.
55
     *
56
     * @param Item $item
57
     * @param int  $x
58
     * @param int  $y
59
     * @param int  $z
60
     * @param int  $width
61
     * @param int  $length
62
     * @param int  $depth
63
     */
64
    public function __construct(Item $item, int $x, int $y, int $z, int $width, int $length, int $depth)
65
    {
66
        $this->item = $item;
67
        $this->x = $x;
68
        $this->y = $y;
69
        $this->z = $z;
70
        $this->width = $width;
71
        $this->length = $length;
72
        $this->depth = $depth;
73
    }
74
75
    /**
76
     * @return int
77
     */
78
    public function getX(): int
79
    {
80
        return $this->x;
81
    }
82
83
    /**
84
     * @return int
85
     */
86
    public function getY(): int
87
    {
88
        return $this->y;
89
    }
90
91
    /**
92
     * @return int
93
     */
94
    public function getZ(): int
95
    {
96
        return $this->z;
97
    }
98
99
    /**
100
     * @return Item
101
     */
102
    public function getItem(): Item
103
    {
104
        return $this->item;
105
    }
106
107
    /**
108
     * @return int
109
     */
110
    public function getWidth(): int
111
    {
112
        return $this->width;
113
    }
114
115
    /**
116
     * @return int
117
     */
118
    public function getLength(): int
119
    {
120
        return $this->length;
121
    }
122
123
    /**
124
     * @return int
125
     */
126
    public function getDepth(): int
127
    {
128
        return $this->depth;
129
    }
130
131
    /**
132
     * @param OrientatedItem $orientatedItem
133
     * @param int            $x
134
     * @param int            $y
135
     * @param int            $z
136
     *
137
     * @return PackedItem
138
     */
139
    public static function fromOrientatedItem(OrientatedItem $orientatedItem, int $x, int $y, int $z): self
140
    {
141
        return new static(
142
            $orientatedItem->getItem(),
143
            $x,
144
            $y,
145
            $z,
146
            $orientatedItem->getWidth(),
147
            $orientatedItem->getLength(),
148
            $orientatedItem->getDepth()
149
        );
150
    }
151
152
    /**
153
     * @return OrientatedItem
154
     */
155
    public function toOrientatedItem(): OrientatedItem
156
    {
157
        return new OrientatedItem($this->item, $this->width, $this->length, $this->depth);
158
    }
159
}
160