| Total Complexity | 5 | 
| Total Lines | 34 | 
| Duplicated Lines | 0 % | 
| Coverage | 100% | 
| Changes | 1 | ||
| Bugs | 0 | Features | 0 | 
| 1 | <?php  | 
            ||
| 17 | class LayerStabiliser  | 
            ||
| 18 | { | 
            ||
| 19 | /**  | 
            ||
| 20 | * @param PackedLayer[] $packedLayers  | 
            ||
| 21 | *  | 
            ||
| 22 | * @return PackedLayer[]  | 
            ||
| 23 | */  | 
            ||
| 24 | 92 | public function stabilise(array $packedLayers): array  | 
            |
| 25 |     { | 
            ||
| 26 | // first re-order according to footprint  | 
            ||
| 27 | 92 | $stabilisedLayers = [];  | 
            |
| 28 | 92 | usort($packedLayers, $this->compare(...));  | 
            |
| 29 | |||
| 30 | // then for each item in the layer, re-calculate each item's z position  | 
            ||
| 31 | 92 | $currentZ = 0;  | 
            |
| 32 | 92 |         foreach ($packedLayers as $oldZLayer) { | 
            |
| 33 | 92 | $oldZStart = $oldZLayer->getStartZ();  | 
            |
| 34 | 92 | $newZLayer = new PackedLayer();  | 
            |
| 35 | 92 |             foreach ($oldZLayer->getItems() as $oldZItem) { | 
            |
| 36 | 92 | $newZ = $oldZItem->getZ() - $oldZStart + $currentZ;  | 
            |
| 37 | 92 | $newZItem = new PackedItem($oldZItem->getItem(), $oldZItem->getX(), $oldZItem->getY(), $newZ, $oldZItem->getWidth(), $oldZItem->getLength(), $oldZItem->getDepth());  | 
            |
| 38 | 92 | $newZLayer->insert($newZItem);  | 
            |
| 39 | }  | 
            ||
| 40 | |||
| 41 | 92 | $stabilisedLayers[] = $newZLayer;  | 
            |
| 42 | 92 | $currentZ += $newZLayer->getDepth();  | 
            |
| 43 | }  | 
            ||
| 44 | |||
| 45 | 92 | return $stabilisedLayers;  | 
            |
| 46 | }  | 
            ||
| 47 | |||
| 48 | 45 | private function compare(PackedLayer $layerA, PackedLayer $layerB): int  | 
            |
| 51 | }  | 
            ||
| 52 | }  | 
            ||
| 53 | 
This check looks for private methods that have been defined, but are not used inside the class.