Skip to content

Commit 2fe3ebf

Browse files
author
Andy Ferris
committed
Micro-optimizations around Symmetric constructor
1 parent 95848eb commit 2fe3ebf

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/linalg.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,3 +414,12 @@ end
414414

415415
@inline Size{T,SA<:StaticArray}(::Union{Symmetric{T,SA}, Type{Symmetric{T,SA}}}) = Size(SA)
416416
@inline Size{T,SA<:StaticArray}(::Union{Hermitian{T,SA}, Type{Hermitian{T,SA}}}) = Size(SA)
417+
418+
# some micro-optimizations
419+
@inline Base.LinAlg.checksquare{SM<:StaticMatrix}(::SM) = _checksquare(Size(SM))
420+
@pure Base.LinAlg.checksquare{SM<:StaticMatrix}(::Type{SM}) = _checksquare(Size(SM))
421+
422+
@pure _checksquare{S}(::Size{S}) = (S[1] == S[2] || error("marix must be square"); S[1])
423+
424+
@inline Base.LinAlg.Symmetric(A::StaticMatrix, uplo::Char='U') = (Base.LinAlg.checksquare(A);Symmetric{eltype(A),typeof(A)}(A, uplo))
425+
@inline Base.LinAlg.Hermitian(A::StaticMatrix, uplo::Char='U') = (Base.LinAlg.checksquare(A);Hermitian{eltype(A),typeof(A)}(A, uplo))

0 commit comments

Comments
 (0)