Skip to content

Commit 17bf7da

Browse files
author
Pietro Vertechi
authored
switch to iseltype (JuliaArrays#25)
1 parent 3359521 commit 17bf7da

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/collect.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ function collect_to_columns!(dest::AbstractArray{T}, itr, offs, st) where {T}
4747
elem = iterate(itr, st)
4848
elem === nothing && break
4949
el, st = elem
50-
if isa(el, T)
50+
if iseltype(el, dest)
5151
@inbounds dest[i] = el
5252
i += 1
5353
else
@@ -74,7 +74,7 @@ function grow_to_columns!(dest::AbstractArray{T}, itr, elem = iterate(itr)) wher
7474
i = length(dest)+1
7575
while elem !== nothing
7676
el, st = elem
77-
if isa(el, T)
77+
if iseltype(el, dest)
7878
push!(dest, el)
7979
elem = iterate(itr, st)
8080
i += 1

src/utils.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@ end
99
map_types(f, ::Type{NamedTuple{names, types}}) where {names, types} =
1010
NamedTuple{names, map_types(f, types)}
1111

12+
all_types(f, ::Type{Tuple{}}, ::Type{T}) where {T<:Tuple} = true
13+
14+
function all_types(f, ::Type{S}, ::Type{T}) where {S<:Tuple, T<:Tuple}
15+
f(tuple_type_head(S), tuple_type_head(T)) && all_types(f, tuple_type_tail(S), tuple_type_tail(T))
16+
end
17+
18+
all_types(f, ::Type{NamedTuple{n1, t1}}, ::Type{NamedTuple{n2, t2}}) where {n1, t1, n2, t2} =
19+
all_types(f, t1, t2)
20+
1221
map_params(f, ::Type{Tuple{}}) = ()
1322
function map_params(f, ::Type{T}) where {T<:Tuple}
1423
(f(tuple_type_head(T)), map_params(f, tuple_type_tail(T))...)
@@ -58,3 +67,11 @@ function createtype(::Type{<:Pair}, names, types)
5867
tp = types.parameters
5968
Pair{tp[1], tp[2]}
6069
end
70+
71+
iseltype(::S, ::T) where {S, T<:AbstractArray} = iscompatible(S, T)
72+
73+
iscompatible(::Type{S}, ::Type{<:AbstractArray{T}}) where {S, T} = S<:T
74+
75+
function iscompatible(::Type{S}, ::Type{StructArray{T, N, C}}) where {S, T, N, C}
76+
all_types(iscompatible, staticschema(S), C)
77+
end

0 commit comments

Comments
 (0)