|
76 | 76 | return nothing
|
77 | 77 | end
|
78 | 78 |
|
| 79 | +# Cast any Tuple to an TupleN{T} |
| 80 | +@inline convert_ntuple(::Type{T},d::T) where {T} = T # For zero-dimensional arrays |
| 81 | +@inline convert_ntuple(::Type{T},d::NTuple{N,T}) where {N,T} = d |
| 82 | +@generated function convert_ntuple(::Type{T}, d::NTuple{N,Any}) where {N,T} |
| 83 | + exprs = ntuple(i -> :(convert(T, d[$i])), Val(N)) |
| 84 | + return quote |
| 85 | + Base.@_inline_meta |
| 86 | + $(Expr(:tuple, exprs...)) |
| 87 | + end |
| 88 | +end |
| 89 | + |
79 | 90 |
|
80 | 91 | """
|
81 | 92 | SArray{S, T, N, L}(x::NTuple{L})
|
|
187 | 198 |
|
188 | 199 | @inline MArray{S,T,N}(x::Tuple) where {S<:Tuple,T,N} = MArray{S,T,N,tuple_prod(S)}(x)
|
189 | 200 |
|
190 |
| -@generated function (::Type{MArray{S,T,N}})(::UndefInitializer) where {S,T,N} |
191 |
| - return quote |
192 |
| - $(Expr(:meta, :inline)) |
193 |
| - MArray{S, T, N, $(tuple_prod(S))}(undef) |
194 |
| - end |
195 |
| -end |
196 |
| - |
197 |
| -@generated function (::Type{MArray{S,T}})(::UndefInitializer) where {S,T} |
198 |
| - return quote |
199 |
| - $(Expr(:meta, :inline)) |
200 |
| - MArray{S, T, $(tuple_length(S)), $(tuple_prod(S))}(undef) |
201 |
| - end |
202 |
| -end |
203 |
| - |
204 | 201 | """
|
205 | 202 | MVector{S,T}(undef)
|
206 | 203 | MVector{S,T}(x::NTuple{S, T})
|
@@ -275,19 +272,6 @@ struct SizedArray{S<:Tuple,T,N,M,TData<:AbstractArray{T,M}} <: StaticArray{S,T,N
|
275 | 272 | end
|
276 | 273 | end
|
277 | 274 |
|
278 |
| -@inline function SizedArray{S,T,N,M}(a::AbstractArray) where {S<:Tuple,T,N,M} |
279 |
| - if eltype(a) == T && (M == 1 || M == ndims(a)) |
280 |
| - a′ = M == 1 ? vec(a) : a |
281 |
| - return SizedArray{S,T,N,M,typeof(a′)}(a′) |
282 |
| - end |
283 |
| - return convert(SizedArray{S,T,N,M}, a) |
284 |
| -end |
285 |
| - |
286 |
| -@inline function SizedArray{S,T,N}(a::AbstractArray) where {S<:Tuple,T,N} |
287 |
| - M = ndims(a) == N ? N : 1 |
288 |
| - return SizedArray{S,T,N,M}(a) |
289 |
| -end |
290 |
| - |
291 | 275 | const SizedVector{S,T} = SizedArray{Tuple{S},T,1,1}
|
292 | 276 |
|
293 | 277 | const SizedMatrix{S1,S2,T} = SizedArray{Tuple{S1,S2},T,2}
|
|
0 commit comments