CallbackIterator   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 2

Importance

Changes 0
Metric Value
wmc 6
lcom 2
cbo 2
dl 0
loc 42
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
A rewind() 0 6 1
A next() 0 5 1
A uncachedCurrent() 0 4 1
A valid() 0 4 2
1
<?php
2
3
namespace itertools;
4
5
6
class CallbackIterator extends CurrentCachedIterator
7
{
8
    protected $maxInvocations;
9
    protected $callback;
10
    protected $breakCallback;
11
    protected $invocationCount;
12
    protected $breakCalled;
13
14
    public function __construct($callback, $maxInvocations = INF)
15
    {
16
        parent::__construct(new RepeatIterator(true));
17
        $this->callback = $callback;
18
        $this->maxInvocations = $maxInvocations;
19
        $breakCalled = &$this->breakCalled;
20
        $this->breakCallback = function() use (&$breakCalled) {
21
            $breakCalled = true;
22
        };
23
    }
24
25
    public function rewind()
26
    {
27
        $this->breakCalled = false;
28
        $this->invocationCount = 0;
29
        parent::rewind();
30
    }
31
32
    public function next()
33
    {
34
        $this->invocationCount += 1;
35
        parent::next();
36
    }
37
38
    public function uncachedCurrent()
39
    {
40
        return call_user_func($this->callback, $this->breakCallback);
41
    }
42
43
    public function valid()
44
    {
45
        return $this->invocationCount < $this->maxInvocations && ! $this->breakCalled;
46
    }
47
}
48
49