10 #ifndef EIGEN_SELFADJOINT_PRODUCT_H
11 #define EIGEN_SELFADJOINT_PRODUCT_H
22 template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
33 += (
alpha * cj(vecY[i])) * ConjLhsType(OtherMap(vecX+(UpLo==
Lower ? i : 0),UpLo==
Lower ?
size-i : (i+1)));
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
101 Index depth = actualOther.cols();
104 MatrixType::MaxColsAtCompileTime, MatrixType::MaxColsAtCompileTime, _ActualOtherType::MaxColsAtCompileTime> BlockingType;
106 BlockingType blocking(
size,
size, depth, 1,
false);
114 &actualOther.coeffRef(0,0), actualOther.outerStride(), &actualOther.coeffRef(0,0), actualOther.outerStride(),
115 mat.data(),
mat.outerStride(), actualAlpha, blocking);
121 template<
typename MatrixType,
unsigned int UpLo>
122 template<
typename DerivedU>
133 #endif // EIGEN_SELFADJOINT_PRODUCT_H