|
230 | 230 |
|
231 | 231 | #--------------------------------------------------
|
232 | 232 | # Concatenation
|
233 |
| -@inline vcat(a::StaticVecOrMatLike) = a |
| 233 | +@inline vcat(a::StaticMatrixLike) = a |
234 | 234 | @inline vcat(a::StaticVecOrMatLike, b::StaticVecOrMatLike) = _vcat(Size(a), Size(b), a, b)
|
235 | 235 | @inline vcat(a::StaticVecOrMatLike, b::StaticVecOrMatLike, c::StaticVecOrMatLike...) = vcat(vcat(a,b), vcat(c...))
|
| 236 | +# A couple of hacky overloads to avoid some vcat surprises. |
| 237 | +# We can't really make this work a lot better in general without Base providing |
| 238 | +# a dispatch mechanism for output container type. |
| 239 | +@inline vcat(a::StaticVector) = a |
| 240 | +@inline vcat(a::StaticVector, bs::Number...) = vcat(a, SVector(bs)) |
| 241 | +@inline vcat(a::Number, b::StaticVector) = vcat(similar_type(b, typeof(a), Size(1))((a,)), b) |
236 | 242 |
|
237 | 243 | @generated function _vcat(::Size{Sa}, ::Size{Sb}, a::StaticVecOrMatLike, b::StaticVecOrMatLike) where {Sa, Sb}
|
238 | 244 | if Size(Sa)[2] != Size(Sb)[2]
|
|
261 | 267 | @inline hcat(a::StaticMatrixLike) = a
|
262 | 268 | @inline hcat(a::StaticVecOrMatLike, b::StaticVecOrMatLike) = _hcat(Size(a), Size(b), a, b)
|
263 | 269 | @inline hcat(a::StaticVecOrMatLike, b::StaticVecOrMatLike, c::StaticVecOrMatLike...) = hcat(hcat(a,b), hcat(c...))
|
| 270 | +@inline hcat(a::StaticMatrix{1}) = a # disambiguation |
| 271 | +@inline hcat(a::StaticMatrix{1}, bs::Number...) = hcat(a, SMatrix{1,length(bs)}(bs)) |
| 272 | +@inline hcat(a::Number, b::StaticMatrix{1}) = hcat(similar_type(b, typeof(a), Size(1))((a,)), b) |
264 | 273 |
|
265 | 274 | @generated function _hcat(::Size{Sa}, ::Size{Sb}, a::StaticVecOrMatLike, b::StaticVecOrMatLike) where {Sa, Sb}
|
266 | 275 | if Sa[1] != Sb[1]
|
|
0 commit comments