Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef EIGEN_SELFADJOINT_PRODUCT_H
00026 #define EIGEN_SELFADJOINT_PRODUCT_H
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 template<typename MatrixType, unsigned int UpLo>
00037 template<typename DerivedU>
00038 SelfAdjointView<MatrixType,UpLo>& SelfAdjointView<MatrixType,UpLo>
00039 ::rankUpdate(const MatrixBase<DerivedU>& u, Scalar alpha)
00040 {
00041 typedef internal::blas_traits<DerivedU> UBlasTraits;
00042 typedef typename UBlasTraits::DirectLinearAccessType ActualUType;
00043 typedef typename internal::remove_all<ActualUType>::type _ActualUType;
00044 const ActualUType actualU = UBlasTraits::extract(u.derived());
00045
00046 Scalar actualAlpha = alpha * UBlasTraits::extractScalarFactor(u.derived());
00047
00048 enum { IsRowMajor = (internal::traits<MatrixType>::Flags&RowMajorBit) ? 1 : 0 };
00049
00050 internal::general_matrix_matrix_triangular_product<Index,
00051 Scalar, _ActualUType::Flags&RowMajorBit ? RowMajor : ColMajor, UBlasTraits::NeedToConjugate && NumTraits<Scalar>::IsComplex,
00052 Scalar, _ActualUType::Flags&RowMajorBit ? ColMajor : RowMajor, (!UBlasTraits::NeedToConjugate) && NumTraits<Scalar>::IsComplex,
00053 MatrixType::Flags&RowMajorBit ? RowMajor : ColMajor, UpLo>
00054 ::run(_expression().cols(), actualU.cols(),
00055 &actualU.coeffRef(0,0), actualU.outerStride(), &actualU.coeffRef(0,0), actualU.outerStride(),
00056 _expression().const_cast_derived().data(), _expression().outerStride(), actualAlpha);
00057
00058 return *this;
00059 }
00060
00061 #endif // EIGEN_SELFADJOINT_PRODUCT_H