ArrayAddingIterator::from()   A
last analyzed

Complexity

Conditions 2
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 3
Metric Value
cc 2
eloc 5
c 5
b 0
f 3
nc 1
nop 1
dl 0
loc 8
rs 10
1
<?php
2
3
namespace MaxGoryunov\SavingIterator\Src;
4
5
use Iterator;
6
7
/**
8
 * Adding iterator which stores values in an array.
9
 * @template TKey
10
 * @template TValue
11
 * @implements AddingIterator<TKey, TValue>
12
 */
13
final class ArrayAddingIterator implements AddingIterator
14
{
15
16
    /**
17
     * Ctor.
18
     * 
19
     * @phpstan-param array<TKey, TValue> $added
20
     * @param mixed[] $added added values.
21
     */
22
    public function __construct(
23
        /**
24
         * Added values.
25
         *
26
         * @var mixed[]
27
         */
28
        private array $added = []
29
    ) {
30
    }
31
32
    /**
33
     * {@inheritDoc}
34
     */
35
    public function from(Iterator $source): AddingIterator
36
    {
37
        return new self(
38
            array_merge(
39
                $this->added,
40
                (isset($this->added[$source->key()]))
41
                ? []
42
                : [$source->key() => $source->current()]
43
            )
44
        );
45
    }
46
47
    /**
48
     * {@inheritDoc}
49
     */
50
    public function current(): mixed
51
    {
52
        return current($this->added);
53
    }
54
55
    /**
56
     * {@inheritDoc}
57
     * @phpstan-return int|string|null
58
     */
59
    public function key(): mixed
60
    {
61
        return key($this->added);
62
    }
63
64
    /**
65
     * {@inheritDoc}
66
     */
67
    public function next(): void
68
    {
69
        next($this->added);
70
    }
71
72
    /**
73
     * {@inheritDoc}
74
     */
75
    public function valid(): bool
76
    {
77
        return $this->key() !== null;
78
    }
79
80
    /**
81
     * {@inheritDoc}
82
     */
83
    public function rewind(): void
84
    {
85
        reset($this->added);
86
    }
87
}
88