Passed
Push — master ( 40c774...9e9b54 )
by
unknown
37s
created

DifferenceIterator   C

Complexity

Total Complexity 2

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 25

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 59
ccs 9
cts 9
cp 1
rs 5
c 0
b 0
f 0
wmc 2
lcom 1
cbo 25

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A accept() 0 7 1
1
<?php
2
/**
3
 * @author Boudewijn Schoon <[email protected]>
4
 * @copyright Zicht Online <http://zicht.nl>
5
 */
6
7
namespace Zicht\Itertools\lib;
8
9
use Zicht\Itertools\lib\Traits\AllTrait;
10
use Zicht\Itertools\lib\Traits\AnyTrait;
11
use Zicht\Itertools\lib\Traits\ChainTrait;
12
use Zicht\Itertools\lib\Traits\CountableTrait;
13
use Zicht\Itertools\lib\Traits\CycleTrait;
14
use Zicht\Itertools\lib\Traits\DebugInfoTrait;
15
use Zicht\Itertools\lib\Traits\DifferenceTrait;
16
use Zicht\Itertools\lib\Traits\FilterTrait;
17
use Zicht\Itertools\lib\Traits\FirstTrait;
18
use Zicht\Itertools\lib\Traits\GroupByTrait;
19
use Zicht\Itertools\lib\Traits\ItemsTrait;
20
use Zicht\Itertools\lib\Traits\KeysTrait;
21
use Zicht\Itertools\lib\Traits\LastTrait;
22
use Zicht\Itertools\lib\Traits\MapByTrait;
23
use Zicht\Itertools\lib\Traits\MapTrait;
24
use Zicht\Itertools\lib\Traits\ReduceTrait;
25
use Zicht\Itertools\lib\Traits\ReversedTrait;
26
use Zicht\Itertools\lib\Traits\SliceTrait;
27
use Zicht\Itertools\lib\Traits\SortedTrait;
28
use Zicht\Itertools\lib\Traits\ToArrayTrait;
29
use Zicht\Itertools\lib\Traits\UniqueTrait;
30
use Zicht\Itertools\lib\Traits\ValuesTrait;
31
use Zicht\Itertools\lib\Traits\ZipTrait;
32
use Zicht\Itertools;
33
34
/**
35
 * Class DifferenceIterator
36
 *
37
 * @package Zicht\Itertools\lib
38
 */
39
class DifferenceIterator extends \FilterIterator implements \Countable
40
{
41
    use CountableTrait;
42
    use DebugInfoTrait;
43
44
    // Fluent interface traits
45
    use AllTrait;
46
    use AnyTrait;
47
    use ChainTrait;
48
    use CycleTrait;
49
    use DifferenceTrait;
50
    use FilterTrait;
51
    use FirstTrait;
52
    use GroupByTrait;
53
    use ItemsTrait;
54
    use KeysTrait;
55
    use LastTrait;
56
    use MapByTrait;
57
    use MapTrait;
58
    use ReduceTrait;
59
    use ReversedTrait;
60
    use SliceTrait;
61
    use SortedTrait;
62
    use ToArrayTrait;
63
    use UniqueTrait;
64
    use ValuesTrait;
65
    use ZipTrait;
66
67
    /** @var \Closure */
68
    private $func;
69
70
    /** @var mixed[] */
71
    private $excludes;
72
73
    /**
74
     * DifferenceIterator constructor.
75
     *
76
     * @param \Iterator $iterable
77
     * @param \Iterator $excludesIterable
78
     * @param \Closure $func
79
     */
80 7
    public function __construct(\Iterator $iterable, \Iterator $excludesIterable, \Closure $func)
81
    {
82 7
        $this->func = $func;
83 7
        $this->excludes = Itertools\iterable($excludesIterable)->map($this->func)->values();
84 7
        parent::__construct($iterable);
85 7
    }
86
87
    /**
88
     * @{inheritDoc}
89
     */
90 4
    public function accept()
91
    {
92 4
        return !in_array(
93 4
            call_user_func_array($this->func, [$this->current(), $this->key()]),
94 4
            $this->excludes
95
        );
96
    }
97
}
98