Skip to content

Commit 05d1c2a

Browse files
committed
enhance the return type of collect(Enumerable)
add init_sink(Enumerable) method that defaults to Vector{eltype}, but keeps the source type for SimpleSourceEnumerable{T,<:AbstractArray}
1 parent 9ce1c70 commit 05d1c2a

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/sink_array.jl

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
init_sink(enumerable::Enumerable) = Vector{eltype(enumerable)}()
2+
3+
# preserve AbstractArray subtype when collecting
4+
# allows collecting CategoricalValue into CategoricalArray
5+
init_sink(enumerable::SimpleSourceEnumerable{T,<:AbstractVector{T}}) where T =
6+
similar(source(enumerable), 0)
7+
8+
# recurse to get to the root source
9+
init_sink(enumerable::SimpleSourceEnumerable{T,<:SimpleSourceEnumerable{T}}) where T =
10+
init_sink(source(enumerable))
11+
112
function Base.collect(enumerable::Enumerable)
2-
T = eltype(enumerable)
3-
ret = Array{T}(0)
4-
for i in enumerable
5-
push!(ret, i)
6-
end
7-
return ret
13+
ret = init_sink(enumerable)
14+
append!(ret, enumerable)
815
end
916

1017
function Base.collect{TS,Provider}(source::Queryable{TS,Provider})

0 commit comments

Comments
 (0)