10 #ifndef EIGEN_BLASUTIL_H 11 #define EIGEN_BLASUTIL_H 21 template<
typename LhsScalar,
typename RhsScalar,
typename Index,
int mr,
int nr,
bool ConjugateLhs=false,
bool ConjugateRhs=false>
24 template<
typename Scalar,
typename Index,
int nr,
int StorageOrder,
bool Conjugate = false,
bool PanelMode=false>
27 template<
typename Scalar,
typename Index,
int Pack1,
int Pack2,
int StorageOrder,
bool Conjugate = false,
bool PanelMode = false>
32 typename LhsScalar,
int LhsStorageOrder,
bool ConjugateLhs,
33 typename RhsScalar,
int RhsStorageOrder,
bool ConjugateRhs,
37 template<
typename Index,
typename LhsScalar,
int LhsStorageOrder,
bool ConjugateLhs,
typename RhsScalar,
bool ConjugateRhs,
int Version=Specialized>
54 inline const T&
pconj(
const T& x) {
return x; }
57 template<
typename Scalar>
struct conj_helper<Scalar,Scalar,false,false>
63 template<
typename RealScalar>
struct conj_helper<
std::complex<RealScalar>, std::complex<RealScalar>, false,true>
65 typedef std::complex<RealScalar>
Scalar;
67 {
return c +
pmul(x,y); }
73 template<
typename RealScalar>
struct conj_helper<
std::complex<RealScalar>, std::complex<RealScalar>, true,false>
75 typedef std::complex<RealScalar>
Scalar;
77 {
return c +
pmul(x,y); }
83 template<
typename RealScalar>
struct conj_helper<
std::complex<RealScalar>, std::complex<RealScalar>, true,true>
85 typedef std::complex<RealScalar>
Scalar;
87 {
return c +
pmul(x,y); }
93 template<
typename RealScalar,
bool Conj>
struct conj_helper<
std::complex<RealScalar>, RealScalar, Conj,false>
95 typedef std::complex<RealScalar>
Scalar;
102 template<
typename RealScalar,
bool Conj>
struct conj_helper<RealScalar,
std::complex<RealScalar>, false,Conj>
122 template<
typename Scalar,
typename Index,
int StorageOrder>
128 {
return m_data[StorageOrder==
RowMajor ? j + i*m_stride : i + j*m_stride]; }
135 template<
typename Scalar,
typename Index,
int StorageOrder>
141 {
return m_data[StorageOrder==
RowMajor ? j + i*m_stride : i + j*m_stride]; }
158 IsTransposed =
false,
159 NeedToConjugate =
false,
161 && (
bool(XprType::IsVectorAtCompileTime)
165 typedef typename conditional<bool(HasUsableDirectAccess),
167 typename _ExtractType::PlainObject
169 static inline ExtractType
extract(
const XprType& x) {
return x; }
174 template<
typename Scalar,
typename NestedXpr>
184 NeedToConjugate = Base::NeedToConjugate ? 0 : IsComplex
191 template<
typename Scalar,
typename NestedXpr>
204 template<
typename Scalar,
typename NestedXpr>
217 template<
typename NestedXpr>
221 typedef typename NestedXpr::Scalar
Scalar;
226 typedef typename conditional<bool(Base::HasUsableDirectAccess),
228 typename ExtractType::PlainObject
231 IsTransposed = Base::IsTransposed ? 0 : 1
242 template<typename T, bool HasUsableDirectAccess=blas_traits<T>::HasUsableDirectAccess>
244 static const typename T::Scalar*
run(
const T& m)
252 static typename T::Scalar*
run(
const T&) {
return 0; }
255 template<
typename T>
const typename T::Scalar*
extract_data(
const T& m)
264 #endif // EIGEN_BLASUTIL_H const Scalar *EIGEN_RESTRICT m_data
const UnaryOp & functor() const
EIGEN_STRONG_INLINE Scalar pmul(const Scalar &x, const RealScalar &y) const
Base::ExtractType ExtractType
CwiseUnaryOp< scalar_opposite_op< Scalar >, NestedXpr > XprType
const AutoDiffScalar< DerType > & conj(const AutoDiffScalar< DerType > &x)
blas_traits< NestedXpr > Base
blas_data_mapper(Scalar *data, Index stride)
#define EIGEN_STRONG_INLINE
USING_NAMESPACE_ACADO typedef TaylorVariable< Interval > T
blas_traits< NestedXpr > Base
static ExtractType extract(const XprType &x)
EIGEN_STRONG_INLINE Scalar pmadd(const Scalar &x, const Scalar &y, const Scalar &c) const
const T & operator()(const T &x)
static const Scalar extractScalarFactor(const XprType &)
const internal::remove_all< typename XprType::Nested >::type & nestedExpression() const
Expression of the transpose of a matrix.
const unsigned int DirectAccessBit
conditional< bool(HasUsableDirectAccess), ExtractType, typename _ExtractType::PlainObject >::type DirectLinearAccessType
EIGEN_STRONG_INLINE Scalar & operator()(Index i, Index j)
static EIGEN_STRONG_INLINE NumTraits< Scalar >::Real run(const Scalar &x)
iterative scaling algorithm to equilibrate rows and column norms in matrices
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
EIGEN_STRONG_INLINE Scalar pmadd(const RealScalar &x, const Scalar &y, const Scalar &c) const
static Scalar extractScalarFactor(const XprType &x)
std::complex< RealScalar > Scalar
EIGEN_STRONG_INLINE Scalar pmul(const Scalar &x, const Scalar &y) const
const ImagReturnType imag() const
blas_traits< NestedXpr > Base
EIGEN_STRONG_INLINE Scalar pmul(const Scalar &x, const Scalar &y) const
static ExtractType extract(const XprType &x)
Transpose< const typename Base::_ExtractType > ExtractType
RealReturnType real() const
static ExtractType extract(const XprType &x)
std::complex< RealScalar > Scalar
CwiseUnaryOp< scalar_multiple_op< Scalar >, NestedXpr > XprType
std::complex< RealScalar > Scalar
Base::ExtractType ExtractType
static ExtractType extract(const XprType &x)
static Scalar extractScalarFactor(const XprType &x)
CwiseUnaryOp< scalar_conjugate_op< Scalar >, NestedXpr > XprType
Transpose< NestedXpr > XprType
EIGEN_STRONG_INLINE Scalar pmadd(const Scalar &x, const Scalar &y, const Scalar &c) const
EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf &a)
static Scalar extractScalarFactor(const XprType &x)
EIGEN_STRONG_INLINE Scalar pmadd(const Scalar &x, const Scalar &y, const Scalar &c) const
EIGEN_STRONG_INLINE Scalar pmul(const Scalar &x, const Scalar &y) const
Scalar *EIGEN_RESTRICT m_data
Base::ExtractType ExtractType
EIGEN_STRONG_INLINE Scalar pmul(const Scalar &x, const Scalar &y) const
EIGEN_STRONG_INLINE Scalar pmul(const RealScalar &x, const Scalar &y) const
EIGEN_STRONG_INLINE const Scalar & operator()(Index i, Index j) const
EIGEN_STRONG_INLINE Scalar pmadd(const Scalar &x, const Scalar &y, const Scalar &c) const
static EIGEN_STRONG_INLINE To run(const From &x)
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Packet pmul(const Packet &a, const Packet &b)
conditional< bool(Base::HasUsableDirectAccess), ExtractType, typename ExtractType::PlainObject >::type DirectLinearAccessType
blas_traits< NestedXpr > Base
const_blas_data_mapper(const Scalar *data, Index stride)
const T::Scalar * extract_data(const T &m)
Generic expression where a coefficient-wise unary operator is applied to an expression.
EIGEN_STRONG_INLINE Scalar pmadd(const Scalar &x, const RealScalar &y, const Scalar &c) const
traits< XprType >::Scalar Scalar
static Scalar extractScalarFactor(const XprType &x)
const internal::remove_all< typename MatrixType::Nested >::type & nestedExpression() const
std::complex< RealScalar > Scalar
static ExtractType extract(const XprType &x)
Packet padd(const Packet &a, const Packet &b)
std::complex< RealScalar > Scalar
Transpose< const typename Base::_ExtractType > _ExtractType
const XprType & ExtractType
const T & pconj(const T &x)