Completed
Push — issue89 ( 93fa49 )
by Doug
23:38
created

PackedItem::toOrientatedItem()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
/**
3
 * Box packing (3D bin packing, knapsack problem)
4
 * @package BoxPacker
5
 * @author Doug Wright
6
 */
7
declare(strict_types=1);
8
namespace DVDoug\BoxPacker;
9
10
/**
11
 * A packed item
12
 * @author Doug Wright
13
 * @package BoxPacker
14
 */
15
class PackedItem
16
{
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 39
    public function __construct(Item $item, int $x, int $y, int $z, int $width, int $length, int $depth)
65
    {
66 39
        $this->item = $item;
67 39
        $this->x = $x;
68 39
        $this->y = $y;
69 39
        $this->z = $z;
70 39
        $this->width = $width;
71 39
        $this->length = $length;
72 39
        $this->depth = $depth;
73
    }
74
75
    /**
76
     * @return int
77
     */
78 12
    public function getX(): int
79
    {
80 12
        return $this->x;
81
    }
82
83
    /**
84
     * @return int
85
     */
86 12
    public function getY(): int
87
    {
88 12
        return $this->y;
89
    }
90
91
    /**
92
     * @return int
93
     */
94 12
    public function getZ(): int
95
    {
96 12
        return $this->z;
97
    }
98
99
    /**
100
     * @return Item
101
     */
102 30
    public function getItem(): Item
103
    {
104 30
        return $this->item;
105
    }
106
107
    /**
108
     * @return int
109
     */
110 13
    public function getWidth(): int
111
    {
112 13
        return $this->width;
113
    }
114
115
    /**
116
     * @return int
117
     */
118 13
    public function getLength(): int
119
    {
120 13
        return $this->length;
121
    }
122
123
    /**
124
     * @return int
125
     */
126 13
    public function getDepth(): int
127
    {
128 13
        return $this->depth;
129
    }
130
131
132
    /**
133
     * @param OrientatedItem $orientatedItem
134
     * @param int            $x
135
     * @param int            $y
136
     * @param int            $z
137
     *
138
     * @return PackedItem
139
     */
140 39
    public static function fromOrientatedItem(OrientatedItem $orientatedItem, int $x, int $y, int $z): PackedItem
141
    {
142 39
        return new static(
143 39
            $orientatedItem->getItem(),
144 39
            $x,
145 39
            $y,
146 39
            $z,
147 39
            $orientatedItem->getWidth(),
148 39
            $orientatedItem->getLength(),
149 39
            $orientatedItem->getDepth()
150
        );
151
    }
152
153
    /**
154
     * @return OrientatedItem
155
     */
156 32
    public function toOrientatedItem(): OrientatedItem
157
    {
158 32
        return new OrientatedItem($this->item, $this->width, $this->length, $this->depth);
159
    }
160
}
161
162