|
59 | 59 | @inline Base.typed_hvcat(sa::Type{SA}, rows::Dims, xs::Number...) = _SA_typed_hvcat(sa, rows, xs) |
60 | 60 | @inline Base.typed_hvcat(sa::Type{SA{T}}, rows::Dims, xs::Number...) where T = _SA_typed_hvcat(sa, rows, xs) |
61 | 61 |
|
| 62 | +if VERSION >= v"1.7" |
| 63 | +@generated function reorder(x::NTuple{M,Any}, ::Val{N1}, ::Val{N2}) where {M,N1,N2} |
| 64 | + a = Base.PermutedDimsArray(reshape(1:M, N1, N2, :), (2, 1, 3)) |
| 65 | + args = (:(x[$i]) for i in a) |
| 66 | + return :(tuple($(args...))) |
| 67 | +end |
| 68 | + |
| 69 | +@inline function _SA_typed_hvncat(sa, dimsshape, row_first, xs) |
| 70 | + msize = Size(dimsshape) |
| 71 | + xs′ = row_first ? reorder(xs, Val(msize[1]), Val(msize[2])) : xs |
| 72 | + x = similar_type(sa, msize)(xs′) |
| 73 | +end |
| 74 | + |
| 75 | +@inline Base.typed_hvncat(sa::Type{SA}, dimsshape::Dims, row_first::Bool, xs::Number...) = _SA_typed_hvncat(sa, dimsshape, row_first, xs) |
| 76 | +@inline Base.typed_hvncat(sa::Type{SA{T}}, dimsshape::Dims, row_first::Bool, xs::Number...) where T = _SA_typed_hvncat(sa, dimsshape, row_first, xs) |
| 77 | + |
| 78 | +@inline function _SA_typed_hvncat(sa, ::Val{dim}, xs) where {dim} |
| 79 | + msize = Size(ntuple(_->1, Val(dim))..., length(xs)) |
| 80 | + x = similar_type(sa, msize)(xs) |
| 81 | +end |
| 82 | + |
| 83 | +@inline Base.typed_hvncat(sa::Type{SA}, dim::Int, xs::Number...) = _SA_typed_hvncat(sa, Val(dim-1), xs) |
| 84 | +@inline Base.typed_hvncat(sa::Type{SA{T}}, dim::Int, xs::Number...) where T = _SA_typed_hvncat(sa, Val(dim-1), xs) |
| 85 | +end |
0 commit comments