Navigation | Overlay |
---|---|
t Navigate files | h Toggle hits |
y Change url to tip of branch | m Toggle misses |
b / v Jump to prev/next hit line | p Toggle partial |
z / x Jump to prev/next missed or partial line | 1..9 Toggle flags |
shift + o Open current page in GitHub | a Toggle all on |
/ or ? Show keyboard shortcuts dialog | c Toggle context lines or commits |
1 |
# T is the type of the elements produced by this iterator
|
|
2 |
struct EnumerableFilter{T,S,Q<:Function} <: Enumerable |
|
3 | 23 |
source::S |
4 |
filter::Q |
|
5 |
end
|
|
6 |
|
|
7 |
Base.eltype(iter::Type{EnumerableFilter{T,S,Q}}) where {T,S,Q} = T |
|
8 |
|
|
9 |
function filter(source::Enumerable, filter_func::Function, filter_expr::Expr) |
|
10 | 23 |
T = eltype(source) |
11 |
S = typeof(source) |
|
12 | 23 |
Q = typeof(filter_func) |
13 | 23 |
return EnumerableFilter{T,S,Q}(source, filter_func) |
14 |
end
|
|
15 |
|
|
16 |
function Base.iterate(iter::EnumerableFilter{T,S,Q}, state...) where {T,S,Q} |
|
17 | 23 |
ret = iterate(iter.source, state...) |
18 |
|
|
19 | 23 |
while ret!==nothing |
20 | 23 |
if iter.filter(ret[1]) |
21 | 23 |
return ret |
22 |
end
|
|
23 |
|
|
24 | 23 |
ret = iterate(iter.source, ret[2]) |
25 |
end
|
|
26 |
|
|
27 | 23 |
return nothing |
28 |
end
|
Read our documentation on viewing source code .