10 #ifndef EIGEN_SELFADJOINT_PRODUCT_H
11 #define EIGEN_SELFADJOINT_PRODUCT_H
22 template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
38 template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
43 selfadjoint_rank1_update<Scalar,Index,ColMajor,UpLo==Lower?Upper:Lower,ConjRhs,ConjLhs>::run(
size,
mat,stride,vecY,vecX,
alpha);
47 template<
typename MatrixType,
typename OtherType,
int UpLo,
bool OtherIsVector = OtherType::IsVectorAtCompileTime>
50 template<
typename MatrixType,
typename OtherType,
int UpLo>
57 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
61 Scalar actualAlpha =
alpha * OtherBlasTraits::extractScalarFactor(
other.derived());
65 UseOtherDirectly = _ActualOtherType::InnerStrideAtCompileTime==1
70 (UseOtherDirectly ?
const_cast<Scalar*
>(actualOther.data()) : static_other.data()));
78 ::
run(
other.size(),
mat.data(),
mat.outerStride(), actualOtherPtr, actualOtherPtr, actualAlpha);
82 template<
typename MatrixType,
typename OtherType,
int UpLo>
83 struct selfadjoint_product_selector<
MatrixType,OtherType,UpLo,false>
89 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
93 Scalar actualAlpha =
alpha * OtherBlasTraits::extractScalarFactor(
other.derived());
97 OtherIsRowMajor = _ActualOtherType::Flags&
RowMajorBit ? 1 : 0
104 MatrixType::MaxColsAtCompileTime, MatrixType::MaxColsAtCompileTime, _ActualOtherType::MaxColsAtCompileTime> BlockingType;
112 IsRowMajor ?
RowMajor :
ColMajor, MatrixType::InnerStrideAtCompileTime, UpLo>
114 actualOther.data(), actualOther.outerStride(), actualOther.data(), actualOther.outerStride(),
115 mat.data(),
mat.innerStride(),
mat.outerStride(), actualAlpha, blocking);
121 template<
typename MatrixType,
unsigned int UpLo>
122 template<
typename DerivedU>
133 #endif // EIGEN_SELFADJOINT_PRODUCT_H