Times   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 28
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 10
c 0
b 0
f 0
dl 0
loc 28
ccs 10
cts 10
cp 1
rs 10
wmc 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 23 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace loophp\collection\Operation;
6
7
use Closure;
8
use Generator;
9
use Iterator;
10
11
/**
12
 * @immutable
13
 *
14
 * @template TKey
15
 * @template T
16
 */
17
final class Times extends AbstractOperation
18
{
19
    /**
20
     * @return Closure(int): Closure(null|callable(int): (int|T)): Closure(null|Iterator<TKey, T>): Generator<int, int|T>
21
     */
22 2
    public function __invoke(): Closure
23
    {
24 2
        return
25
            /**
26
             * @return Closure(null|callable(int): (int|T)): Closure(): Generator<int, int|T>
27
             */
28 2
            static fn (int $number = 0): Closure =>
29
                /**
30
                 * @return Closure(): Generator<int, int|T>
31
                 */
32 2
                static fn (?callable $callback = null): Closure =>
33
                    /**
34
                     * @return Generator<int, int|T>
35
                     */
36 2
                    static function () use ($number, $callback): Generator {
37 2
                        if (1 > $number) {
38 2
                            return;
39
                        }
40
41 2
                        $callback ??= static fn (int $value): int => $value;
42
43 2
                        for ($current = 1; $current <= $number; ++$current) {
44 2
                            yield $callback($current);
45
                        }
46 2
                    };
47
    }
48
}
49