@@ -58,7 +58,8 @@ not set them).
5858When multiple input arrays are supplied, `M[i] = f(A[i], B[i], C[i]...)`.
5959"""
6060function mappedarray (f, data:: AbstractArray )
61- T = Base. _return_type (f, eltypes (data))
61+ infer_eltype () = Base. _return_type (f, eltypes (data))
62+ T = infer_eltype ()
6263 ReadonlyMappedArray {T,ndims(data),typeof(data),typeof(f)} (f, data)
6364end
6465
@@ -67,7 +68,8 @@ function mappedarray(::Type{T}, data::AbstractArray) where T
6768end
6869
6970function mappedarray (f, data:: AbstractArray... )
70- T = Base. _return_type (f, eltypes (data))
71+ infer_eltype () = Base. _return_type (f, eltypes (data))
72+ T = infer_eltype ()
7173 ReadonlyMultiMappedArray {T,ndims(first(data)),typeof(data),typeof(f)} (f, data)
7274end
7375
@@ -86,20 +88,23 @@ the view and, correspondingly, the values in `A`.
8688When multiple input arrays are supplied, `M[i] = f(A[i], B[i], C[i]...)`.
8789"""
8890function mappedarray (f, finv, data:: AbstractArray )
89- T = Base. _return_type (f, eltypes (data))
91+ infer_eltype () = Base. _return_type (f, eltypes (data))
92+ T = infer_eltype ()
9093 MappedArray {T,ndims(data),typeof(data),typeof(f),typeof(finv)} (f, finv, data)
9194end
9295
9396function mappedarray (f, finv, data:: AbstractArray... )
94- T = Base. _return_type (f, eltypes (data))
97+ infer_eltype () = Base. _return_type (f, eltypes (data))
98+ T = infer_eltype ()
9599 MultiMappedArray {T,ndims(first(data)),typeof(data),typeof(f),typeof(finv)} (f, finv, data)
96100end
97101
98102function mappedarray (:: Type{T} , finv, data:: AbstractArray... ) where T
99103 MultiMappedArray {T,ndims(first(data)),typeof(data),Type{T},typeof(finv)} (T, finv, data)
100104end
101105function mappedarray (f, :: Type{Finv} , data:: AbstractArray... ) where Finv
102- T = Base. _return_type (f, eltypes (data))
106+ infer_eltype () = Base. _return_type (f, eltypes (data))
107+ T = infer_eltype ()
103108 MultiMappedArray {T,ndims(first(data)),typeof(data),typeof(f),Type{Finv}} (f, Finv, data)
104109end
105110
113118
114119creates a view of `A` that lazily-converts the element type to `T`.
115120"""
116- of_eltype (:: Type{T} , data:: AbstractArray{S} ) where {S,T} = mappedarray (x-> convert (T,x), y-> convert (S,y), data)
121+ of_eltype (:: Type{T} , data:: AbstractArray{S} ) where {S,T} = mappedarray (x-> convert (T,x):: T , y-> convert (S,y):: S , data)
117122of_eltype (:: Type{T} , data:: AbstractArray{T} ) where {T} = data
118123of_eltype (:: T , data:: AbstractArray{S} ) where {S,T} = of_eltype (T, data)
119124
0 commit comments