|
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