Passed
Push — php7.0 ( 973540...f56c39 )
by SignpostMarv
06:05
created

TraitRememberDaftObject::RememberDaftObject()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 7
nc 2
nop 1
dl 0
loc 10
ccs 8
cts 8
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
* Base daft objects.
4
*
5
* @author SignpostMarv
6
*/
7
declare(strict_types=1);
8
9
namespace SignpostMarv\DaftObject;
10
11
trait TraitRememberDaftObject
12
{
13 57
    public function RememberDaftObject(DefinesOwnIdPropertiesInterface $object)
14
    {
15 57
        if ($object instanceof DaftNestedWriteableObject) {
16 56
            $this->RememberDaftObjectWriteableTyped($object);
17
        } else {
18 1
            NestedTypeParanoia::ThrowIfNotWriteableNestedType(
19 1
                $object,
20 1
                1,
21 1
                static::class,
22 1
                __FUNCTION__
23
            );
24
        }
25 56
    }
26
27
    /**
28
    * @return array<int, DaftNestedObject>
29
    */
30
    abstract public function RecallDaftNestedObjectFullTree(
31
        int $relativeDepthLimit = null
32
    ) : array;
33
34
    abstract public function CountDaftNestedObjectFullTree(int $relativeDepthLimit = null) : int;
35
36 56
    private function RememberDaftObjectWriteableTyped(DaftNestedWriteableObject $object)
37
    {
38 56
        $left = $object->GetIntNestedLeft();
39 56
        $right = $object->GetIntNestedRight();
40 56
        $level = $object->GetIntNestedLevel();
41
42 56
        if (0 === $left && 0 === $right && 0 === $level) {
43 55
            $fullTreeCount = $this->CountDaftNestedObjectFullTree();
44
45 55
            if ($fullTreeCount > AbstractArrayBackedDaftNestedObject::COUNT_EXPECT_NON_EMPTY) {
46 42
                $tree = $this->RecallDaftNestedObjectFullTree();
47
48
                /**
49
                * @var DaftNestedWriteableObject
50
                */
51 42
                $end = end($tree);
52
53 42
                $left = $end->GetIntNestedRight() + 1;
54
            } else {
55 55
                $left = $fullTreeCount + $fullTreeCount;
56
            }
57
58 55
            $object->SetIntNestedLeft($left);
59 55
            $object->SetIntNestedRight($left + 1);
60
        }
61
62 56
        parent::RememberDaftObject($object);
63 56
    }
64
}
65