Skip to content

Commit 857dcce

Browse files
authored
Merge pull request #28 from quinnj/jq/perf
Change IteratorSize on EnumerableMap to just pass through from underl…
2 parents 35eb87c + 41c7551 commit 857dcce

5 files changed

Lines changed: 6 additions & 4 deletions

File tree

src/enumerable/enumerable.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ abstract type Enumerable end
22

33
Base.IteratorSize(::Type{T}) where {T <: Enumerable} = Base.SizeUnknown()
44
IteratorInterfaceExtensions.isiterable(x::Enumerable) = true
5+
6+
haslength(S) = Base.IteratorSize(S) isa Union{Base.HasLength, Base.HasShape} ? Base.HasLength() : Base.IteratorSize(S)

src/enumerable/enumerable_map.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ struct EnumerableMap{T, S, Q<:Function} <: Enumerable
33
f::Q
44
end
55

6-
Base.IteratorSize(::Type{EnumerableMap{T,S,Q}}) where {T,S,Q} = !in(Base.IteratorSize(S), (Base.IsInfinite(), Base.SizeUnknown())) ? Base.HasLength() : Base.IteratorSize(S)
6+
Base.IteratorSize(::Type{EnumerableMap{T,S,Q}}) where {T,S,Q} = haslength(S)
77

88
Base.eltype(iter::Type{EnumerableMap{T,S,Q}}) where {T,S,Q} = T
99

src/enumerable/enumerable_orderby.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ struct EnumerableOrderby{T,S,KS<:Function,TKS} <: Enumerable
44
descending::Bool
55
end
66

7-
Base.IteratorSize(::Type{EnumerableOrderby{T,S,KS,TKS}}) where {T,S,KS,TKS} = (Base.IteratorSize(S) isa Base.HasLength || Base.IteratorSize(S) isa Base.HasShape) ? Base.HasLength() : Base.IteratorSize(S)
7+
Base.IteratorSize(::Type{EnumerableOrderby{T,S,KS,TKS}}) where {T,S,KS,TKS} = haslength(S)
88

99
Base.eltype(::Type{EnumerableOrderby{T,S,KS,TKS}}) where {T,S,KS,TKS} = T
1010

src/enumerable/enumerable_take.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ function take(source::Enumerable, n::Integer)
99
return EnumerableTake{T,S}(source, Int(n))
1010
end
1111

12-
Base.IteratorSize(::Type{EnumerableTake{T,S}}) where {T,S} = (Base.IteratorSize(S) isa Base.HasLength || Base.IteratorSize(S) isa Base.HasShape) ? Base.HasLength() : Base.SizeUnknown()
12+
Base.IteratorSize(::Type{EnumerableTake{T,S}}) where {T,S} = haslength(S)
1313

1414
Base.eltype(::Type{EnumerableTake{T,S}}) where {T,S} = T
1515

src/source_iterable.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function query(source)
1313
return source_enumerable
1414
end
1515

16-
Base.IteratorSize(::Type{EnumerableIterable{T,S}}) where {T,S} = Base.IteratorSize(S) isa Base.HasShape ? Base.HasLength() : Base.IteratorSize(S)
16+
Base.IteratorSize(::Type{EnumerableIterable{T,S}}) where {T,S} = haslength(S)
1717

1818
Base.eltype(::Type{EnumerableIterable{T,S}}) where {T,S} = T
1919

0 commit comments

Comments
 (0)