@@ -58,7 +58,8 @@ not set them).
58
58
When multiple input arrays are supplied, `M[i] = f(A[i], B[i], C[i]...)`.
59
59
"""
60
60
function 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 ()
62
63
ReadonlyMappedArray {T,ndims(data),typeof(data),typeof(f)} (f, data)
63
64
end
64
65
@@ -67,7 +68,8 @@ function mappedarray(::Type{T}, data::AbstractArray) where T
67
68
end
68
69
69
70
function 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 ()
71
73
ReadonlyMultiMappedArray {T,ndims(first(data)),typeof(data),typeof(f)} (f, data)
72
74
end
73
75
@@ -86,20 +88,23 @@ the view and, correspondingly, the values in `A`.
86
88
When multiple input arrays are supplied, `M[i] = f(A[i], B[i], C[i]...)`.
87
89
"""
88
90
function 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 ()
90
93
MappedArray {T,ndims(data),typeof(data),typeof(f),typeof(finv)} (f, finv, data)
91
94
end
92
95
93
96
function 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 ()
95
99
MultiMappedArray {T,ndims(first(data)),typeof(data),typeof(f),typeof(finv)} (f, finv, data)
96
100
end
97
101
98
102
function mappedarray (:: Type{T} , finv, data:: AbstractArray... ) where T
99
103
MultiMappedArray {T,ndims(first(data)),typeof(data),Type{T},typeof(finv)} (T, finv, data)
100
104
end
101
105
function 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 ()
103
108
MultiMappedArray {T,ndims(first(data)),typeof(data),typeof(f),Type{Finv}} (f, Finv, data)
104
109
end
105
110
113
118
114
119
creates a view of `A` that lazily-converts the element type to `T`.
115
120
"""
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)
117
122
of_eltype (:: Type{T} , data:: AbstractArray{T} ) where {T} = data
118
123
of_eltype (:: T , data:: AbstractArray{S} ) where {S,T} = of_eltype (T, data)
119
124
0 commit comments