Completed
Push — master ( 73b3d9...d4697b )
by Ítalo
02:38
created

LazyIterableTrait::concatAll()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 12
Code Lines 6

Duplication

Lines 12
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 12
loc 12
rs 9.4285
cc 2
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace Collections\Iterator;
4
5
use Collections\Immutable\ImmArrayList;
6
use Collections\Immutable\ImmDictionary;
7
use Collections\Immutable\ImmSet;
8
use Collections\Map;
9
use Collections\Pair;
10
use Collections\Set;
11
use Collections\Vector;
12
use Collections\VectorInterface;
13
14
trait LazyIterableTrait
15
{
16
    public function toArray()
17
    {
18
        $arr = array();
19
        foreach ($this as $v) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
20
            $arr[] = $v;
21
        }
22
23
        return $arr;
24
    }
25
26
    public function toValuesArray()
27
    {
28
        return $this->toArray();
29
    }
30
31
    public function toVector()
32
    {
33
        return new Vector($this);
34
    }
35
36
    public function toImmVector()
37
    {
38
        return new ImmArrayList($this);
39
    }
40
41
    public function toSet()
42
    {
43
        return new Set($this);
44
    }
45
46
    public function toImmSet()
47
    {
48
        return new ImmSet($this);
49
    }
50
51
    public function lazy()
52
    {
53
        return $this;
54
    }
55
56
    public function values()
57
    {
58
        return new LazyValuesIterable($this);
59
    }
60
61
    public function map(callable $callback)
62
    {
63
        return new LazyMapIterable($this, $callback);
64
    }
65
66
    public function filter(callable $callback)
67
    {
68
        return new LazyFilterIterable($this, $callback);
69
    }
70
71
    public function zip($iterable)
72
    {
73
        if (is_array($iterable)) {
74
            $iterable = new ImmDictionary($iterable);
75
        }
76
77
        return new LazyZipIterable($this, $iterable);
78
    }
79
80
    public function take($size = 1)
81
    {
82
        return new LazyTakeIterable($this, $size);
83
    }
84
85
    public function takeWhile($fn)
86
    {
87
        return new LazyTakeWhileIterable($this, $fn);
88
    }
89
90
    public function skip($n)
91
    {
92
        return new LazySkipIterable($this, $n);
93
    }
94
95
    public function skipWhile($fn)
96
    {
97
        return new LazySkipWhileIterable($this, $fn);
98
    }
99
100
    public function slice($start, $len)
101
    {
102
        return new LazySliceIterable($this, $start, $len);
103
    }
104
105
    public function concat($iterable)
106
    {
107
        if (is_array($iterable)) {
108
            $iterable = new ImmDictionary($iterable);
109
        }
110
111
        return new LazyConcatIterable($this, $iterable);
112
    }
113
114
    public function first()
115
    {
116
        foreach ($this as $v) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
117
            return $v;
118
        }
119
120
        return null;
121
    }
122
123
    public function last()
124
    {
125
        $v = null;
126
        foreach ($this as $v) {
0 ignored issues
show
Unused Code introduced by
This foreach statement is empty and can be removed.

This check looks for foreach loops that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

Consider removing the loop.

Loading history...
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
127
        }
128
129
        return $v;
130
    }
131
132
    /**
133
     * {@inheritDoc}
134
     * @return $this
135
     */
136
    public function each(callable $callable)
137
    {
138
        foreach ($this as $v) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
139
            $callable($v);
140
        }
141
142
        return $this;
143
    }
144
145
    /**
146
     * {@inheritdoc}
147
     */
148
    public function exists(callable $fn)
149
    {
150
        foreach ($this as $element) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
151
            if ($fn($element)) {
152
                return true;
153
            }
154
        }
155
156
        return false;
157
    }
158
159 View Code Duplication
    public function concatAll()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
160
    {
161
        /** @var VectorInterface $results */
162
        $results = new static();
163
        $this->each(function ($subArray) use ($results) {
164
            foreach ($subArray as $item) {
165
                $results->add($item);
166
            }
167
        });
168
169
        return $results;
170
    }
171
172
    /**
173
     * {@inheritDoc}
174
     * @return $this
175
     */
176 View Code Duplication
    public function groupBy($callback)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
177
    {
178
        $group = new Map();
179
        foreach ($this as $value) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
180
            $key = $callback($value);
181
            if (!$group->containsKey($key)) {
182
                $element = $this instanceof VectorInterface ? new static([$value]) : new Vector([$value]);
0 ignored issues
show
Unused Code introduced by
The call to LazyIterableTrait::__construct() has too many arguments starting with array($value).

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
183
                $group->add(new Pair($key, $element));
184
            } else {
185
                $value = $group->get($key)->add($value);
186
                $group->set($key, $value);
187
            }
188
        }
189
190
        return $group;
191
    }
192
193
    /**
194
     * {@inheritDoc}
195
     * @return $this
196
     */
197 View Code Duplication
    public function indexBy($callback)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
198
    {
199
        $group = new Map();
200
        foreach ($this as $value) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
201
            $key = $callback($value);
202
            $group->set($key, $value);
203
        }
204
205
        return $group;
206
    }
207
208
    /**
209
     * {@inheritdoc}
210
     */
211
    public function reduce(callable $callback, $initial = null)
212
    {
213
        foreach ($this as $element) {
0 ignored issues
show
Bug introduced by
The expression $this of type this<Collections\Iterator\LazyIterableTrait> is not traversable.
Loading history...
214
            $initial = $callback($initial, $element);
215
        }
216
217
        return $initial;
218
    }
219
}
220