mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
bug #1680: improve MSVC inlining by declaring many triavial constructors and accessors as STRONG_INLINE.
This commit is contained in:
parent
0505248f25
commit
83309068b4
@ -611,7 +611,8 @@ public:
|
|||||||
typedef typename AssignmentTraits::PacketType PacketType;
|
typedef typename AssignmentTraits::PacketType PacketType;
|
||||||
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC generic_dense_assignment_kernel(DstEvaluatorType &dst, const SrcEvaluatorType &src, const Functor &func, DstXprType& dstExpr)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
generic_dense_assignment_kernel(DstEvaluatorType &dst, const SrcEvaluatorType &src, const Functor &func, DstXprType& dstExpr)
|
||||||
: m_dst(dst), m_src(src), m_functor(func), m_dstExpr(dstExpr)
|
: m_dst(dst), m_src(src), m_functor(func), m_dstExpr(dstExpr)
|
||||||
{
|
{
|
||||||
#ifdef EIGEN_DEBUG_ASSIGN
|
#ifdef EIGEN_DEBUG_ASSIGN
|
||||||
|
@ -114,8 +114,8 @@ template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel> class
|
|||||||
|
|
||||||
/** Column or Row constructor
|
/** Column or Row constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Block(XprType& xpr, Index i) : Impl(xpr,i)
|
Block(XprType& xpr, Index i) : Impl(xpr,i)
|
||||||
{
|
{
|
||||||
eigen_assert( (i>=0) && (
|
eigen_assert( (i>=0) && (
|
||||||
((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i<xpr.rows())
|
((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i<xpr.rows())
|
||||||
@ -124,8 +124,8 @@ template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel> class
|
|||||||
|
|
||||||
/** Fixed-size constructor
|
/** Fixed-size constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Block(XprType& xpr, Index startRow, Index startCol)
|
Block(XprType& xpr, Index startRow, Index startCol)
|
||||||
: Impl(xpr, startRow, startCol)
|
: Impl(xpr, startRow, startCol)
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
|
EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
|
||||||
@ -135,8 +135,8 @@ template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel> class
|
|||||||
|
|
||||||
/** Dynamic-size constructor
|
/** Dynamic-size constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Block(XprType& xpr,
|
Block(XprType& xpr,
|
||||||
Index startRow, Index startCol,
|
Index startRow, Index startCol,
|
||||||
Index blockRows, Index blockCols)
|
Index blockRows, Index blockCols)
|
||||||
: Impl(xpr, startRow, startCol, blockRows, blockCols)
|
: Impl(xpr, startRow, startCol, blockRows, blockCols)
|
||||||
@ -159,10 +159,10 @@ class BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Dense>
|
|||||||
public:
|
public:
|
||||||
typedef Impl Base;
|
typedef Impl Base;
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl)
|
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl)
|
||||||
EIGEN_DEVICE_FUNC inline BlockImpl(XprType& xpr, Index i) : Impl(xpr,i) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index i) : Impl(xpr,i) {}
|
||||||
EIGEN_DEVICE_FUNC inline BlockImpl(XprType& xpr, Index startRow, Index startCol) : Impl(xpr, startRow, startCol) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index startRow, Index startCol) : Impl(xpr, startRow, startCol) {}
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
||||||
: Impl(xpr, startRow, startCol, blockRows, blockCols) {}
|
: Impl(xpr, startRow, startCol, blockRows, blockCols) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -294,22 +294,22 @@ template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel, bool H
|
|||||||
EIGEN_DEVICE_FUNC inline Index outerStride() const;
|
EIGEN_DEVICE_FUNC inline Index outerStride() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
||||||
{
|
{
|
||||||
return m_xpr;
|
return m_xpr;
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
XprType& nestedExpression() { return m_xpr; }
|
XprType& nestedExpression() { return m_xpr; }
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
StorageIndex startRow() const
|
StorageIndex startRow() const
|
||||||
{
|
{
|
||||||
return m_startRow.value();
|
return m_startRow.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
StorageIndex startCol() const
|
StorageIndex startCol() const
|
||||||
{
|
{
|
||||||
return m_startCol.value();
|
return m_startCol.value();
|
||||||
@ -342,8 +342,8 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
|
|
||||||
/** Column or Row constructor
|
/** Column or Row constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline BlockImpl_dense(XprType& xpr, Index i)
|
BlockImpl_dense(XprType& xpr, Index i)
|
||||||
: Base(xpr.data() + i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor))
|
: Base(xpr.data() + i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor))
|
||||||
|| ((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && ( XprTypeIsRowMajor)) ? xpr.innerStride() : xpr.outerStride()),
|
|| ((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && ( XprTypeIsRowMajor)) ? xpr.innerStride() : xpr.outerStride()),
|
||||||
BlockRows==1 ? 1 : xpr.rows(),
|
BlockRows==1 ? 1 : xpr.rows(),
|
||||||
@ -357,8 +357,8 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
|
|
||||||
/** Fixed-size constructor
|
/** Fixed-size constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
|
BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
|
||||||
: Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol)),
|
: Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol)),
|
||||||
m_xpr(xpr), m_startRow(startRow), m_startCol(startCol)
|
m_xpr(xpr), m_startRow(startRow), m_startCol(startCol)
|
||||||
{
|
{
|
||||||
@ -367,8 +367,8 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
|
|
||||||
/** Dynamic-size constructor
|
/** Dynamic-size constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline BlockImpl_dense(XprType& xpr,
|
BlockImpl_dense(XprType& xpr,
|
||||||
Index startRow, Index startCol,
|
Index startRow, Index startCol,
|
||||||
Index blockRows, Index blockCols)
|
Index blockRows, Index blockCols)
|
||||||
: Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol), blockRows, blockCols),
|
: Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol), blockRows, blockCols),
|
||||||
@ -377,18 +377,18 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
||||||
{
|
{
|
||||||
return m_xpr;
|
return m_xpr;
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
XprType& nestedExpression() { return m_xpr; }
|
XprType& nestedExpression() { return m_xpr; }
|
||||||
|
|
||||||
/** \sa MapBase::innerStride() */
|
/** \sa MapBase::innerStride() */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Index innerStride() const
|
Index innerStride() const
|
||||||
{
|
{
|
||||||
return internal::traits<BlockType>::HasSameStorageOrderAsXprType
|
return internal::traits<BlockType>::HasSameStorageOrderAsXprType
|
||||||
? m_xpr.innerStride()
|
? m_xpr.innerStride()
|
||||||
@ -396,19 +396,19 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** \sa MapBase::outerStride() */
|
/** \sa MapBase::outerStride() */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Index outerStride() const
|
Index outerStride() const
|
||||||
{
|
{
|
||||||
return m_outerStride;
|
return m_outerStride;
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
StorageIndex startRow() const
|
StorageIndex startRow() const
|
||||||
{
|
{
|
||||||
return m_startRow.value();
|
return m_startRow.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
StorageIndex startCol() const
|
StorageIndex startCol() const
|
||||||
{
|
{
|
||||||
return m_startCol.value();
|
return m_startCol.value();
|
||||||
@ -422,8 +422,8 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||||
/** \internal used by allowAligned() */
|
/** \internal used by allowAligned() */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline BlockImpl_dense(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols)
|
BlockImpl_dense(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols)
|
||||||
: Base(data, blockRows, blockCols), m_xpr(xpr)
|
: Base(data, blockRows, blockCols), m_xpr(xpr)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
@ -431,7 +431,7 @@ class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
m_outerStride = internal::traits<BlockType>::HasSameStorageOrderAsXprType
|
m_outerStride = internal::traits<BlockType>::HasSameStorageOrderAsXprType
|
||||||
|
@ -90,7 +90,8 @@ template<typename T>
|
|||||||
struct evaluator : public unary_evaluator<T>
|
struct evaluator : public unary_evaluator<T>
|
||||||
{
|
{
|
||||||
typedef unary_evaluator<T> Base;
|
typedef unary_evaluator<T> Base;
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const T& xpr) : Base(xpr) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const T& xpr) : Base(xpr) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +100,7 @@ template<typename T>
|
|||||||
struct evaluator<const T>
|
struct evaluator<const T>
|
||||||
: evaluator<T>
|
: evaluator<T>
|
||||||
{
|
{
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
explicit evaluator(const T& xpr) : evaluator<T>(xpr) {}
|
explicit evaluator(const T& xpr) : evaluator<T>(xpr) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -134,21 +135,25 @@ private:
|
|||||||
// this helper permits to completely eliminate m_outerStride if it is known at compiletime.
|
// this helper permits to completely eliminate m_outerStride if it is known at compiletime.
|
||||||
template<typename Scalar,int OuterStride> class plainobjectbase_evaluator_data {
|
template<typename Scalar,int OuterStride> class plainobjectbase_evaluator_data {
|
||||||
public:
|
public:
|
||||||
EIGEN_DEVICE_FUNC plainobjectbase_evaluator_data(const Scalar* ptr, Index outerStride) : data(ptr)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
plainobjectbase_evaluator_data(const Scalar* ptr, Index outerStride) : data(ptr)
|
||||||
{
|
{
|
||||||
#ifndef EIGEN_INTERNAL_DEBUGGING
|
#ifndef EIGEN_INTERNAL_DEBUGGING
|
||||||
EIGEN_UNUSED_VARIABLE(outerStride);
|
EIGEN_UNUSED_VARIABLE(outerStride);
|
||||||
#endif
|
#endif
|
||||||
eigen_internal_assert(outerStride==OuterStride);
|
eigen_internal_assert(outerStride==OuterStride);
|
||||||
}
|
}
|
||||||
EIGEN_DEVICE_FUNC Index outerStride() const { return OuterStride; }
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Index outerStride() const { return OuterStride; }
|
||||||
const Scalar *data;
|
const Scalar *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Scalar> class plainobjectbase_evaluator_data<Scalar,Dynamic> {
|
template<typename Scalar> class plainobjectbase_evaluator_data<Scalar,Dynamic> {
|
||||||
public:
|
public:
|
||||||
EIGEN_DEVICE_FUNC plainobjectbase_evaluator_data(const Scalar* ptr, Index outerStride) : data(ptr), m_outerStride(outerStride) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_DEVICE_FUNC Index outerStride() const { return m_outerStride; }
|
plainobjectbase_evaluator_data(const Scalar* ptr, Index outerStride) : data(ptr), m_outerStride(outerStride) {}
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Index outerStride() const { return m_outerStride; }
|
||||||
const Scalar *data;
|
const Scalar *data;
|
||||||
protected:
|
protected:
|
||||||
Index m_outerStride;
|
Index m_outerStride;
|
||||||
@ -179,13 +184,15 @@ struct evaluator<PlainObjectBase<Derived> >
|
|||||||
: RowsAtCompileTime
|
: RowsAtCompileTime
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC evaluator()
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
evaluator()
|
||||||
: m_d(0,OuterStrideAtCompileTime)
|
: m_d(0,OuterStrideAtCompileTime)
|
||||||
{
|
{
|
||||||
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const PlainObjectType& m)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const PlainObjectType& m)
|
||||||
: m_d(m.data(),IsVectorAtCompileTime ? 0 : m.outerStride())
|
: m_d(m.data(),IsVectorAtCompileTime ? 0 : m.outerStride())
|
||||||
{
|
{
|
||||||
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
||||||
@ -268,9 +275,11 @@ struct evaluator<Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> >
|
|||||||
{
|
{
|
||||||
typedef Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> XprType;
|
typedef Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> XprType;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC evaluator() {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
evaluator() {}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& m)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& m)
|
||||||
: evaluator<PlainObjectBase<XprType> >(m)
|
: evaluator<PlainObjectBase<XprType> >(m)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
@ -281,9 +290,11 @@ struct evaluator<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> >
|
|||||||
{
|
{
|
||||||
typedef Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> XprType;
|
typedef Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> XprType;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC evaluator() {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
evaluator() {}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& m)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& m)
|
||||||
: evaluator<PlainObjectBase<XprType> >(m)
|
: evaluator<PlainObjectBase<XprType> >(m)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
@ -302,7 +313,8 @@ struct unary_evaluator<Transpose<ArgType>, IndexBased>
|
|||||||
Alignment = evaluator<ArgType>::Alignment
|
Alignment = evaluator<ArgType>::Alignment
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& t) : m_argImpl(t.nestedExpression()) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit unary_evaluator(const XprType& t) : m_argImpl(t.nestedExpression()) {}
|
||||||
|
|
||||||
typedef typename XprType::Scalar Scalar;
|
typedef typename XprType::Scalar Scalar;
|
||||||
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
||||||
@ -712,7 +724,8 @@ struct evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
|
|||||||
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
|
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
|
||||||
typedef binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs> > Base;
|
typedef binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs> > Base;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) : Base(xpr) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& xpr) : Base(xpr) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename BinaryOp, typename Lhs, typename Rhs>
|
template<typename BinaryOp, typename Lhs, typename Rhs>
|
||||||
@ -740,7 +753,8 @@ struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IndexBased, IndexBase
|
|||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<Lhs>::Alignment,evaluator<Rhs>::Alignment)
|
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<Lhs>::Alignment,evaluator<Rhs>::Alignment)
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit binary_evaluator(const XprType& xpr) : m_d(xpr)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit binary_evaluator(const XprType& xpr) : m_d(xpr)
|
||||||
{
|
{
|
||||||
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
|
||||||
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
||||||
@ -877,7 +891,8 @@ struct mapbase_evaluator : evaluator_base<Derived>
|
|||||||
CoeffReadCost = NumTraits<Scalar>::ReadCost
|
CoeffReadCost = NumTraits<Scalar>::ReadCost
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit mapbase_evaluator(const XprType& map)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit mapbase_evaluator(const XprType& map)
|
||||||
: m_data(const_cast<PointerType>(map.data())),
|
: m_data(const_cast<PointerType>(map.data())),
|
||||||
m_innerStride(map.innerStride()),
|
m_innerStride(map.innerStride()),
|
||||||
m_outerStride(map.outerStride())
|
m_outerStride(map.outerStride())
|
||||||
@ -941,10 +956,10 @@ struct mapbase_evaluator : evaluator_base<Derived>
|
|||||||
internal::pstoret<Scalar, PacketType, StoreMode>(m_data + index * m_innerStride.value(), x);
|
internal::pstoret<Scalar, PacketType, StoreMode>(m_data + index * m_innerStride.value(), x);
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Index rowStride() const { return XprType::IsRowMajor ? m_outerStride.value() : m_innerStride.value(); }
|
Index rowStride() const { return XprType::IsRowMajor ? m_outerStride.value() : m_innerStride.value(); }
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline Index colStride() const { return XprType::IsRowMajor ? m_innerStride.value() : m_outerStride.value(); }
|
Index colStride() const { return XprType::IsRowMajor ? m_innerStride.value() : m_outerStride.value(); }
|
||||||
|
|
||||||
PointerType m_data;
|
PointerType m_data;
|
||||||
const internal::variable_if_dynamic<Index, XprType::InnerStrideAtCompileTime> m_innerStride;
|
const internal::variable_if_dynamic<Index, XprType::InnerStrideAtCompileTime> m_innerStride;
|
||||||
@ -997,7 +1012,8 @@ struct evaluator<Ref<PlainObjectType, RefOptions, StrideType> >
|
|||||||
Alignment = evaluator<Map<PlainObjectType, RefOptions, StrideType> >::Alignment
|
Alignment = evaluator<Map<PlainObjectType, RefOptions, StrideType> >::Alignment
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& ref)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& ref)
|
||||||
: mapbase_evaluator<XprType, PlainObjectType>(ref)
|
: mapbase_evaluator<XprType, PlainObjectType>(ref)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
@ -1052,7 +1068,8 @@ struct evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel> >
|
|||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<ArgType>::Alignment, Alignment0)
|
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<ArgType>::Alignment, Alignment0)
|
||||||
};
|
};
|
||||||
typedef block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel> block_evaluator_type;
|
typedef block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel> block_evaluator_type;
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& block) : block_evaluator_type(block)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& block) : block_evaluator_type(block)
|
||||||
{
|
{
|
||||||
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
||||||
}
|
}
|
||||||
@ -1065,7 +1082,8 @@ struct block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel, /*HasDirectAcc
|
|||||||
{
|
{
|
||||||
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit block_evaluator(const XprType& block)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit block_evaluator(const XprType& block)
|
||||||
: unary_evaluator<XprType>(block)
|
: unary_evaluator<XprType>(block)
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
@ -1076,7 +1094,8 @@ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBa
|
|||||||
{
|
{
|
||||||
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& block)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit unary_evaluator(const XprType& block)
|
||||||
: m_argImpl(block.nestedExpression()),
|
: m_argImpl(block.nestedExpression()),
|
||||||
m_startRow(block.startRow()),
|
m_startRow(block.startRow()),
|
||||||
m_startCol(block.startCol()),
|
m_startCol(block.startCol()),
|
||||||
@ -1176,7 +1195,8 @@ struct block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel, /* HasDirectAc
|
|||||||
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
typedef Block<ArgType, BlockRows, BlockCols, InnerPanel> XprType;
|
||||||
typedef typename XprType::Scalar Scalar;
|
typedef typename XprType::Scalar Scalar;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit block_evaluator(const XprType& block)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit block_evaluator(const XprType& block)
|
||||||
: mapbase_evaluator<XprType, typename XprType::PlainObject>(block)
|
: mapbase_evaluator<XprType, typename XprType::PlainObject>(block)
|
||||||
{
|
{
|
||||||
// TODO: for the 3.3 release, this should be turned to an internal assertion, but let's keep it as is for the beta lifetime
|
// TODO: for the 3.3 release, this should be turned to an internal assertion, but let's keep it as is for the beta lifetime
|
||||||
@ -1204,7 +1224,8 @@ struct evaluator<Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> >
|
|||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<ThenMatrixType>::Alignment, evaluator<ElseMatrixType>::Alignment)
|
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<ThenMatrixType>::Alignment, evaluator<ElseMatrixType>::Alignment)
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& select)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& select)
|
||||||
: m_conditionImpl(select.conditionMatrix()),
|
: m_conditionImpl(select.conditionMatrix()),
|
||||||
m_thenImpl(select.thenMatrix()),
|
m_thenImpl(select.thenMatrix()),
|
||||||
m_elseImpl(select.elseMatrix())
|
m_elseImpl(select.elseMatrix())
|
||||||
@ -1261,7 +1282,8 @@ struct unary_evaluator<Replicate<ArgType, RowFactor, ColFactor> >
|
|||||||
Alignment = evaluator<ArgTypeNestedCleaned>::Alignment
|
Alignment = evaluator<ArgTypeNestedCleaned>::Alignment
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& replicate)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit unary_evaluator(const XprType& replicate)
|
||||||
: m_arg(replicate.nestedExpression()),
|
: m_arg(replicate.nestedExpression()),
|
||||||
m_argImpl(m_arg),
|
m_argImpl(m_arg),
|
||||||
m_rows(replicate.nestedExpression().rows()),
|
m_rows(replicate.nestedExpression().rows()),
|
||||||
@ -1341,7 +1363,8 @@ struct evaluator_wrapper_base
|
|||||||
Alignment = evaluator<ArgType>::Alignment
|
Alignment = evaluator<ArgType>::Alignment
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator_wrapper_base(const ArgType& arg) : m_argImpl(arg) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator_wrapper_base(const ArgType& arg) : m_argImpl(arg) {}
|
||||||
|
|
||||||
typedef typename ArgType::Scalar Scalar;
|
typedef typename ArgType::Scalar Scalar;
|
||||||
typedef typename ArgType::CoeffReturnType CoeffReturnType;
|
typedef typename ArgType::CoeffReturnType CoeffReturnType;
|
||||||
@ -1408,7 +1431,8 @@ struct unary_evaluator<MatrixWrapper<TArgType> >
|
|||||||
{
|
{
|
||||||
typedef MatrixWrapper<TArgType> XprType;
|
typedef MatrixWrapper<TArgType> XprType;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& wrapper)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit unary_evaluator(const XprType& wrapper)
|
||||||
: evaluator_wrapper_base<MatrixWrapper<TArgType> >(wrapper.nestedExpression())
|
: evaluator_wrapper_base<MatrixWrapper<TArgType> >(wrapper.nestedExpression())
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
@ -1419,7 +1443,8 @@ struct unary_evaluator<ArrayWrapper<TArgType> >
|
|||||||
{
|
{
|
||||||
typedef ArrayWrapper<TArgType> XprType;
|
typedef ArrayWrapper<TArgType> XprType;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& wrapper)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit unary_evaluator(const XprType& wrapper)
|
||||||
: evaluator_wrapper_base<ArrayWrapper<TArgType> >(wrapper.nestedExpression())
|
: evaluator_wrapper_base<ArrayWrapper<TArgType> >(wrapper.nestedExpression())
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
@ -1461,7 +1486,8 @@ struct unary_evaluator<Reverse<ArgType, Direction> >
|
|||||||
Alignment = 0 // FIXME in some rare cases, Alignment could be preserved, like a Vector4f.
|
Alignment = 0 // FIXME in some rare cases, Alignment could be preserved, like a Vector4f.
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& reverse)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit unary_evaluator(const XprType& reverse)
|
||||||
: m_argImpl(reverse.nestedExpression()),
|
: m_argImpl(reverse.nestedExpression()),
|
||||||
m_rows(ReverseRow ? reverse.nestedExpression().rows() : 1),
|
m_rows(ReverseRow ? reverse.nestedExpression().rows() : 1),
|
||||||
m_cols(ReverseCol ? reverse.nestedExpression().cols() : 1)
|
m_cols(ReverseCol ? reverse.nestedExpression().cols() : 1)
|
||||||
@ -1568,7 +1594,8 @@ struct evaluator<Diagonal<ArgType, DiagIndex> >
|
|||||||
Alignment = 0
|
Alignment = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& diagonal)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit evaluator(const XprType& diagonal)
|
||||||
: m_argImpl(diagonal.nestedExpression()),
|
: m_argImpl(diagonal.nestedExpression()),
|
||||||
m_index(diagonal.index())
|
m_index(diagonal.index())
|
||||||
{ }
|
{ }
|
||||||
|
@ -100,8 +100,12 @@ class CwiseBinaryOp :
|
|||||||
typedef typename internal::remove_reference<LhsNested>::type _LhsNested;
|
typedef typename internal::remove_reference<LhsNested>::type _LhsNested;
|
||||||
typedef typename internal::remove_reference<RhsNested>::type _RhsNested;
|
typedef typename internal::remove_reference<RhsNested>::type _RhsNested;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
//Required for Visual Studio or the Copy constructor will probably not get inlined!
|
||||||
EIGEN_STRONG_INLINE CwiseBinaryOp(const Lhs& aLhs, const Rhs& aRhs, const BinaryOp& func = BinaryOp())
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
CwiseBinaryOp(const CwiseBinaryOp<BinaryOp,LhsType,RhsType>&) = default;
|
||||||
|
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
CwiseBinaryOp(const Lhs& aLhs, const Rhs& aRhs, const BinaryOp& func = BinaryOp())
|
||||||
: m_lhs(aLhs), m_rhs(aRhs), m_functor(func)
|
: m_lhs(aLhs), m_rhs(aRhs), m_functor(func)
|
||||||
{
|
{
|
||||||
EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar);
|
EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar);
|
||||||
@ -110,16 +114,16 @@ class CwiseBinaryOp :
|
|||||||
eigen_assert(aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols());
|
eigen_assert(aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols());
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_STRONG_INLINE Index rows() const {
|
Index rows() const {
|
||||||
// return the fixed size type if available to enable compile time optimizations
|
// return the fixed size type if available to enable compile time optimizations
|
||||||
if (internal::traits<typename internal::remove_all<LhsNested>::type>::RowsAtCompileTime==Dynamic)
|
if (internal::traits<typename internal::remove_all<LhsNested>::type>::RowsAtCompileTime==Dynamic)
|
||||||
return m_rhs.rows();
|
return m_rhs.rows();
|
||||||
else
|
else
|
||||||
return m_lhs.rows();
|
return m_lhs.rows();
|
||||||
}
|
}
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_STRONG_INLINE Index cols() const {
|
Index cols() const {
|
||||||
// return the fixed size type if available to enable compile time optimizations
|
// return the fixed size type if available to enable compile time optimizations
|
||||||
if (internal::traits<typename internal::remove_all<LhsNested>::type>::ColsAtCompileTime==Dynamic)
|
if (internal::traits<typename internal::remove_all<LhsNested>::type>::ColsAtCompileTime==Dynamic)
|
||||||
return m_rhs.cols();
|
return m_rhs.cols();
|
||||||
@ -128,13 +132,13 @@ class CwiseBinaryOp :
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** \returns the left hand side nested expression */
|
/** \returns the left hand side nested expression */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const _LhsNested& lhs() const { return m_lhs; }
|
const _LhsNested& lhs() const { return m_lhs; }
|
||||||
/** \returns the right hand side nested expression */
|
/** \returns the right hand side nested expression */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const _RhsNested& rhs() const { return m_rhs; }
|
const _RhsNested& rhs() const { return m_rhs; }
|
||||||
/** \returns the functor representing the binary operation */
|
/** \returns the functor representing the binary operation */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const BinaryOp& functor() const { return m_functor; }
|
const BinaryOp& functor() const { return m_functor; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -415,7 +415,7 @@ template<typename Derived> class DenseBase
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
void swap(const DenseBase<OtherDerived>& other)
|
void swap(const DenseBase<OtherDerived>& other)
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT(!OtherDerived::IsPlainObjectBase,THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY);
|
EIGEN_STATIC_ASSERT(!OtherDerived::IsPlainObjectBase,THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY);
|
||||||
@ -427,7 +427,7 @@ template<typename Derived> class DenseBase
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
void swap(PlainObjectBase<OtherDerived>& other)
|
void swap(PlainObjectBase<OtherDerived>& other)
|
||||||
{
|
{
|
||||||
eigen_assert(rows()==other.rows() && cols()==other.cols());
|
eigen_assert(rows()==other.rows() && cols()==other.cols());
|
||||||
|
@ -396,8 +396,8 @@ template<> struct gemv_dense_selector<OnTheRight,RowMajor,false>
|
|||||||
*/
|
*/
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline const Product<Derived, OtherDerived>
|
const Product<Derived, OtherDerived>
|
||||||
MatrixBase<Derived>::operator*(const MatrixBase<OtherDerived> &other) const
|
MatrixBase<Derived>::operator*(const MatrixBase<OtherDerived> &other) const
|
||||||
{
|
{
|
||||||
// A note regarding the function declaration: In MSVC, this function will sometimes
|
// A note regarding the function declaration: In MSVC, this function will sometimes
|
||||||
@ -439,8 +439,9 @@ MatrixBase<Derived>::operator*(const MatrixBase<OtherDerived> &other) const
|
|||||||
*/
|
*/
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const Product<Derived,OtherDerived,LazyProduct>
|
const Product<Derived,OtherDerived,LazyProduct>
|
||||||
EIGEN_DEVICE_FUNC MatrixBase<Derived>::lazyProduct(const MatrixBase<OtherDerived> &other) const
|
MatrixBase<Derived>::lazyProduct(const MatrixBase<OtherDerived> &other) const
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
ProductIsValid = Derived::ColsAtCompileTime==Dynamic
|
ProductIsValid = Derived::ColsAtCompileTime==Dynamic
|
||||||
|
@ -255,27 +255,27 @@ class Matrix
|
|||||||
*
|
*
|
||||||
* \sa resize(Index,Index)
|
* \sa resize(Index,Index)
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_STRONG_INLINE Matrix() : Base()
|
Matrix() : Base()
|
||||||
{
|
{
|
||||||
Base::_check_template_params();
|
Base::_check_template_params();
|
||||||
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME is it still needed
|
// FIXME is it still needed
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
explicit Matrix(internal::constructor_without_unaligned_array_assert)
|
explicit Matrix(internal::constructor_without_unaligned_array_assert)
|
||||||
: Base(internal::constructor_without_unaligned_array_assert())
|
: Base(internal::constructor_without_unaligned_array_assert())
|
||||||
{ Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
|
{ Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
|
||||||
|
|
||||||
#if EIGEN_HAS_RVALUE_REFERENCES
|
#if EIGEN_HAS_RVALUE_REFERENCES
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
Matrix(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
|
Matrix(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
|
||||||
: Base(std::move(other))
|
: Base(std::move(other))
|
||||||
{
|
{
|
||||||
Base::_check_template_params();
|
Base::_check_template_params();
|
||||||
}
|
}
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
Matrix& operator=(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
Matrix& operator=(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
||||||
{
|
{
|
||||||
other.swap(*this);
|
other.swap(*this);
|
||||||
@ -287,16 +287,16 @@ class Matrix
|
|||||||
|
|
||||||
// This constructor is for both 1x1 matrices and dynamic vectors
|
// This constructor is for both 1x1 matrices and dynamic vectors
|
||||||
template<typename T>
|
template<typename T>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_STRONG_INLINE explicit Matrix(const T& x)
|
explicit Matrix(const T& x)
|
||||||
{
|
{
|
||||||
Base::_check_template_params();
|
Base::_check_template_params();
|
||||||
Base::template _init1<T>(x);
|
Base::template _init1<T>(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T0, typename T1>
|
template<typename T0, typename T1>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_STRONG_INLINE Matrix(const T0& x, const T1& y)
|
Matrix(const T0& x, const T1& y)
|
||||||
{
|
{
|
||||||
Base::_check_template_params();
|
Base::_check_template_params();
|
||||||
Base::template _init2<T0,T1>(x, y);
|
Base::template _init2<T0,T1>(x, y);
|
||||||
|
@ -947,7 +947,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|||||||
* of same type it is enough to swap the data pointers.
|
* of same type it is enough to swap the data pointers.
|
||||||
*/
|
*/
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
void swap(DenseBase<OtherDerived> & other)
|
void swap(DenseBase<OtherDerived> & other)
|
||||||
{
|
{
|
||||||
enum { SwapPointers = internal::is_same<Derived, OtherDerived>::value && Base::SizeAtCompileTime==Dynamic };
|
enum { SwapPointers = internal::is_same<Derived, OtherDerived>::value && Base::SizeAtCompileTime==Dynamic };
|
||||||
@ -958,7 +958,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|||||||
* \brief const version forwarded to DenseBase::swap
|
* \brief const version forwarded to DenseBase::swap
|
||||||
*/
|
*/
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
void swap(DenseBase<OtherDerived> const & other)
|
void swap(DenseBase<OtherDerived> const & other)
|
||||||
{ Base::swap(other.derived()); }
|
{ Base::swap(other.derived()); }
|
||||||
|
|
||||||
@ -1092,7 +1092,7 @@ template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers>
|
|||||||
struct matrix_swap_impl
|
struct matrix_swap_impl
|
||||||
{
|
{
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static inline void run(MatrixTypeA& a, MatrixTypeB& b)
|
static EIGEN_STRONG_INLINE void run(MatrixTypeA& a, MatrixTypeB& b)
|
||||||
{
|
{
|
||||||
a.base().swap(b);
|
a.base().swap(b);
|
||||||
}
|
}
|
||||||
|
@ -90,18 +90,23 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
|
|||||||
typedef typename internal::remove_all<LhsNested>::type LhsNestedCleaned;
|
typedef typename internal::remove_all<LhsNested>::type LhsNestedCleaned;
|
||||||
typedef typename internal::remove_all<RhsNested>::type RhsNestedCleaned;
|
typedef typename internal::remove_all<RhsNested>::type RhsNestedCleaned;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
|
||||||
{
|
{
|
||||||
eigen_assert(lhs.cols() == rhs.rows()
|
eigen_assert(lhs.cols() == rhs.rows()
|
||||||
&& "invalid matrix product"
|
&& "invalid matrix product"
|
||||||
&& "if you wanted a coeff-wise or a dot product use the respective explicit functions");
|
&& "if you wanted a coeff-wise or a dot product use the respective explicit functions");
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rows() const { return m_lhs.rows(); }
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index cols() const { return m_rhs.cols(); }
|
Index rows() const { return m_lhs.rows(); }
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Index cols() const { return m_rhs.cols(); }
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC const LhsNestedCleaned& lhs() const { return m_lhs; }
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_DEVICE_FUNC const RhsNestedCleaned& rhs() const { return m_rhs; }
|
const LhsNestedCleaned& lhs() const { return m_lhs; }
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
const RhsNestedCleaned& rhs() const { return m_rhs; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -582,7 +582,8 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|||||||
* which is why we don't set the LinearAccessBit.
|
* which is why we don't set the LinearAccessBit.
|
||||||
* TODO: this seems possible when the result is a vector
|
* TODO: this seems possible when the result is a vector
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC const CoeffReturnType coeff(Index index) const
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
const CoeffReturnType coeff(Index index) const
|
||||||
{
|
{
|
||||||
const Index row = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? 0 : index;
|
const Index row = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? 0 : index;
|
||||||
const Index col = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? index : 0;
|
const Index col = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? index : 0;
|
||||||
@ -590,6 +591,7 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<int LoadMode, typename PacketType>
|
template<int LoadMode, typename PacketType>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const PacketType packet(Index row, Index col) const
|
const PacketType packet(Index row, Index col) const
|
||||||
{
|
{
|
||||||
PacketType res;
|
PacketType res;
|
||||||
@ -601,6 +603,7 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<int LoadMode, typename PacketType>
|
template<int LoadMode, typename PacketType>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const PacketType packet(Index index) const
|
const PacketType packet(Index index) const
|
||||||
{
|
{
|
||||||
const Index row = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? 0 : index;
|
const Index row = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? 0 : index;
|
||||||
@ -629,7 +632,8 @@ struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, LazyCoeffBasedProduc
|
|||||||
enum {
|
enum {
|
||||||
Flags = Base::Flags | EvalBeforeNestingBit
|
Flags = Base::Flags | EvalBeforeNestingBit
|
||||||
};
|
};
|
||||||
EIGEN_DEVICE_FUNC explicit product_evaluator(const XprType& xpr)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit product_evaluator(const XprType& xpr)
|
||||||
: Base(BaseProduct(xpr.lhs(),xpr.rhs()))
|
: Base(BaseProduct(xpr.lhs(),xpr.rhs()))
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
@ -359,7 +359,8 @@ class redux_evaluator : public internal::evaluator<_XprType>
|
|||||||
typedef internal::evaluator<_XprType> Base;
|
typedef internal::evaluator<_XprType> Base;
|
||||||
public:
|
public:
|
||||||
typedef _XprType XprType;
|
typedef _XprType XprType;
|
||||||
EIGEN_DEVICE_FUNC explicit redux_evaluator(const XprType &xpr) : Base(xpr) {}
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
explicit redux_evaluator(const XprType &xpr) : Base(xpr) {}
|
||||||
|
|
||||||
typedef typename XprType::Scalar Scalar;
|
typedef typename XprType::Scalar Scalar;
|
||||||
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
||||||
@ -375,11 +376,12 @@ public:
|
|||||||
InnerSizeAtCompileTime = XprType::InnerSizeAtCompileTime
|
InnerSizeAtCompileTime = XprType::InnerSizeAtCompileTime
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
CoeffReturnType coeffByOuterInner(Index outer, Index inner) const
|
CoeffReturnType coeffByOuterInner(Index outer, Index inner) const
|
||||||
{ return Base::coeff(IsRowMajor ? outer : inner, IsRowMajor ? inner : outer); }
|
{ return Base::coeff(IsRowMajor ? outer : inner, IsRowMajor ? inner : outer); }
|
||||||
|
|
||||||
template<int LoadMode, typename PacketType>
|
template<int LoadMode, typename PacketType>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
PacketType packetByOuterInner(Index outer, Index inner) const
|
PacketType packetByOuterInner(Index outer, Index inner) const
|
||||||
{ return Base::template packet<LoadMode,PacketType>(IsRowMajor ? outer : inner, IsRowMajor ? inner : outer); }
|
{ return Base::template packet<LoadMode,PacketType>(IsRowMajor ? outer : inner, IsRowMajor ? inner : outer); }
|
||||||
|
|
||||||
|
@ -30,12 +30,13 @@ public:
|
|||||||
typedef typename Base::DstXprType DstXprType;
|
typedef typename Base::DstXprType DstXprType;
|
||||||
typedef swap_assign_op<Scalar> Functor;
|
typedef swap_assign_op<Scalar> Functor;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC generic_dense_assignment_kernel(DstEvaluatorTypeT &dst, const SrcEvaluatorTypeT &src, const Functor &func, DstXprType& dstExpr)
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
generic_dense_assignment_kernel(DstEvaluatorTypeT &dst, const SrcEvaluatorTypeT &src, const Functor &func, DstXprType& dstExpr)
|
||||||
: Base(dst, src, func, dstExpr)
|
: Base(dst, src, func, dstExpr)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<int StoreMode, int LoadMode, typename PacketType>
|
template<int StoreMode, int LoadMode, typename PacketType>
|
||||||
void assignPacket(Index row, Index col)
|
EIGEN_STRONG_INLINE void assignPacket(Index row, Index col)
|
||||||
{
|
{
|
||||||
PacketType tmp = m_src.template packet<LoadMode,PacketType>(row,col);
|
PacketType tmp = m_src.template packet<LoadMode,PacketType>(row,col);
|
||||||
const_cast<SrcEvaluatorTypeT&>(m_src).template writePacket<LoadMode>(row,col, m_dst.template packet<StoreMode,PacketType>(row,col));
|
const_cast<SrcEvaluatorTypeT&>(m_src).template writePacket<LoadMode>(row,col, m_dst.template packet<StoreMode,PacketType>(row,col));
|
||||||
@ -43,7 +44,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<int StoreMode, int LoadMode, typename PacketType>
|
template<int StoreMode, int LoadMode, typename PacketType>
|
||||||
void assignPacket(Index index)
|
EIGEN_STRONG_INLINE void assignPacket(Index index)
|
||||||
{
|
{
|
||||||
PacketType tmp = m_src.template packet<LoadMode,PacketType>(index);
|
PacketType tmp = m_src.template packet<LoadMode,PacketType>(index);
|
||||||
const_cast<SrcEvaluatorTypeT&>(m_src).template writePacket<LoadMode>(index, m_dst.template packet<StoreMode,PacketType>(index));
|
const_cast<SrcEvaluatorTypeT&>(m_src).template writePacket<LoadMode>(index, m_dst.template packet<StoreMode,PacketType>(index));
|
||||||
@ -52,7 +53,7 @@ public:
|
|||||||
|
|
||||||
// TODO find a simple way not to have to copy/paste this function from generic_dense_assignment_kernel, by simple I mean no CRTP (Gael)
|
// TODO find a simple way not to have to copy/paste this function from generic_dense_assignment_kernel, by simple I mean no CRTP (Gael)
|
||||||
template<int StoreMode, int LoadMode, typename PacketType>
|
template<int StoreMode, int LoadMode, typename PacketType>
|
||||||
void assignPacketByOuterInner(Index outer, Index inner)
|
EIGEN_STRONG_INLINE void assignPacketByOuterInner(Index outer, Index inner)
|
||||||
{
|
{
|
||||||
Index row = Base::rowIndexByOuterInner(outer, inner);
|
Index row = Base::rowIndexByOuterInner(outer, inner);
|
||||||
Index col = Base::colIndexByOuterInner(outer, inner);
|
Index col = Base::colIndexByOuterInner(outer, inner);
|
||||||
|
@ -61,25 +61,27 @@ template<typename MatrixType> class Transpose
|
|||||||
typedef typename internal::remove_all<MatrixType>::type NestedExpression;
|
typedef typename internal::remove_all<MatrixType>::type NestedExpression;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
explicit inline Transpose(MatrixType& matrix) : m_matrix(matrix) {}
|
explicit EIGEN_STRONG_INLINE Transpose(MatrixType& matrix) : m_matrix(matrix) {}
|
||||||
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Transpose)
|
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Transpose)
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC inline Index rows() const { return m_matrix.cols(); }
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_DEVICE_FUNC inline Index cols() const { return m_matrix.rows(); }
|
Index rows() const { return m_matrix.cols(); }
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Index cols() const { return m_matrix.rows(); }
|
||||||
|
|
||||||
/** \returns the nested expression */
|
/** \returns the nested expression */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
const typename internal::remove_all<MatrixTypeNested>::type&
|
const typename internal::remove_all<MatrixTypeNested>::type&
|
||||||
nestedExpression() const { return m_matrix; }
|
nestedExpression() const { return m_matrix; }
|
||||||
|
|
||||||
/** \returns the nested expression */
|
/** \returns the nested expression */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
typename internal::remove_reference<MatrixTypeNested>::type&
|
typename internal::remove_reference<MatrixTypeNested>::type&
|
||||||
nestedExpression() { return m_matrix; }
|
nestedExpression() { return m_matrix; }
|
||||||
|
|
||||||
/** \internal */
|
/** \internal */
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
void resize(Index nrows, Index ncols) {
|
void resize(Index nrows, Index ncols) {
|
||||||
m_matrix.resize(ncols,nrows);
|
m_matrix.resize(ncols,nrows);
|
||||||
}
|
}
|
||||||
@ -123,8 +125,10 @@ template<typename MatrixType> class TransposeImpl<MatrixType,Dense>
|
|||||||
EIGEN_DENSE_PUBLIC_INTERFACE(Transpose<MatrixType>)
|
EIGEN_DENSE_PUBLIC_INTERFACE(Transpose<MatrixType>)
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(TransposeImpl)
|
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(TransposeImpl)
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC inline Index innerStride() const { return derived().nestedExpression().innerStride(); }
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_DEVICE_FUNC inline Index outerStride() const { return derived().nestedExpression().outerStride(); }
|
Index innerStride() const { return derived().nestedExpression().innerStride(); }
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Index outerStride() const { return derived().nestedExpression().outerStride(); }
|
||||||
|
|
||||||
typedef typename internal::conditional<
|
typedef typename internal::conditional<
|
||||||
internal::is_lvalue<MatrixType>::value,
|
internal::is_lvalue<MatrixType>::value,
|
||||||
@ -132,18 +136,20 @@ template<typename MatrixType> class TransposeImpl<MatrixType,Dense>
|
|||||||
const Scalar
|
const Scalar
|
||||||
>::type ScalarWithConstIfNotLvalue;
|
>::type ScalarWithConstIfNotLvalue;
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC inline ScalarWithConstIfNotLvalue* data() { return derived().nestedExpression().data(); }
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar* data() const { return derived().nestedExpression().data(); }
|
ScalarWithConstIfNotLvalue* data() { return derived().nestedExpression().data(); }
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
const Scalar* data() const { return derived().nestedExpression().data(); }
|
||||||
|
|
||||||
// FIXME: shall we keep the const version of coeffRef?
|
// FIXME: shall we keep the const version of coeffRef?
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
const Scalar& coeffRef(Index rowId, Index colId) const
|
||||||
{
|
{
|
||||||
return derived().nestedExpression().coeffRef(colId, rowId);
|
return derived().nestedExpression().coeffRef(colId, rowId);
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline const Scalar& coeffRef(Index index) const
|
const Scalar& coeffRef(Index index) const
|
||||||
{
|
{
|
||||||
return derived().nestedExpression().coeffRef(index);
|
return derived().nestedExpression().coeffRef(index);
|
||||||
}
|
}
|
||||||
@ -169,7 +175,8 @@ template<typename MatrixType> class TransposeImpl<MatrixType,Dense>
|
|||||||
*
|
*
|
||||||
* \sa transposeInPlace(), adjoint() */
|
* \sa transposeInPlace(), adjoint() */
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
EIGEN_DEVICE_FUNC inline Transpose<Derived>
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
Transpose<Derived>
|
||||||
DenseBase<Derived>::transpose()
|
DenseBase<Derived>::transpose()
|
||||||
{
|
{
|
||||||
return TransposeReturnType(derived());
|
return TransposeReturnType(derived());
|
||||||
@ -181,7 +188,8 @@ DenseBase<Derived>::transpose()
|
|||||||
*
|
*
|
||||||
* \sa transposeInPlace(), adjoint() */
|
* \sa transposeInPlace(), adjoint() */
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::ConstTransposeReturnType
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
typename DenseBase<Derived>::ConstTransposeReturnType
|
||||||
DenseBase<Derived>::transpose() const
|
DenseBase<Derived>::transpose() const
|
||||||
{
|
{
|
||||||
return ConstTransposeReturnType(derived());
|
return ConstTransposeReturnType(derived());
|
||||||
|
@ -71,8 +71,8 @@ template<typename VectorType, int Size> class VectorBlock
|
|||||||
|
|
||||||
/** Dynamic-size constructor
|
/** Dynamic-size constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline VectorBlock(VectorType& vector, Index start, Index size)
|
VectorBlock(VectorType& vector, Index start, Index size)
|
||||||
: Base(vector,
|
: Base(vector,
|
||||||
IsColVector ? start : 0, IsColVector ? 0 : start,
|
IsColVector ? start : 0, IsColVector ? 0 : start,
|
||||||
IsColVector ? size : 1, IsColVector ? 1 : size)
|
IsColVector ? size : 1, IsColVector ? 1 : size)
|
||||||
@ -82,8 +82,8 @@ template<typename VectorType, int Size> class VectorBlock
|
|||||||
|
|
||||||
/** Fixed-size constructor
|
/** Fixed-size constructor
|
||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
inline VectorBlock(VectorType& vector, Index start)
|
VectorBlock(VectorType& vector, Index start)
|
||||||
: Base(vector, IsColVector ? start : 0, IsColVector ? 0 : start)
|
: Base(vector, IsColVector ? start : 0, IsColVector ? 0 : start)
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock);
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock);
|
||||||
|
@ -866,7 +866,7 @@
|
|||||||
// Suppresses 'unused variable' warnings.
|
// Suppresses 'unused variable' warnings.
|
||||||
namespace Eigen {
|
namespace Eigen {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
template<typename T> EIGEN_DEVICE_FUNC void ignore_unused_variable(const T&) {}
|
template<typename T> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ignore_unused_variable(const T&) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var);
|
#define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var);
|
||||||
@ -1047,7 +1047,7 @@ namespace Eigen {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(METHOD,OPNAME) \
|
#define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(METHOD,OPNAME) \
|
||||||
template <typename T> EIGEN_DEVICE_FUNC inline \
|
template <typename T> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \
|
||||||
EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,Scalar,T)>::type,OPNAME))\
|
EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,Scalar,T)>::type,OPNAME))\
|
||||||
(METHOD)(const T& scalar) const { \
|
(METHOD)(const T& scalar) const { \
|
||||||
typedef typename internal::promote_scalar_arg<Scalar,T,EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,Scalar,T)>::type PromotedT; \
|
typedef typename internal::promote_scalar_arg<Scalar,T,EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,Scalar,T)>::type PromotedT; \
|
||||||
@ -1056,7 +1056,7 @@ namespace Eigen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(METHOD,OPNAME) \
|
#define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(METHOD,OPNAME) \
|
||||||
template <typename T> EIGEN_DEVICE_FUNC inline friend \
|
template <typename T> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE friend \
|
||||||
EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,T,Scalar)>::type,Derived,OPNAME)) \
|
EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,T,Scalar)>::type,Derived,OPNAME)) \
|
||||||
(METHOD)(const T& scalar, const StorageBaseType& matrix) { \
|
(METHOD)(const T& scalar, const StorageBaseType& matrix) { \
|
||||||
typedef typename internal::promote_scalar_arg<Scalar,T,EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,T,Scalar)>::type PromotedT; \
|
typedef typename internal::promote_scalar_arg<Scalar,T,EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,T,Scalar)>::type PromotedT; \
|
||||||
|
@ -27,9 +27,10 @@ namespace Eigen {
|
|||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||||
EIGEN_DEVICE_FUNC inline typename MatrixBase<Derived>::template cross_product_return_type<OtherDerived>::type
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
typename MatrixBase<Derived>::template cross_product_return_type<OtherDerived>::type
|
||||||
#else
|
#else
|
||||||
inline typename MatrixBase<Derived>::PlainObject
|
typename MatrixBase<Derived>::PlainObject
|
||||||
#endif
|
#endif
|
||||||
MatrixBase<Derived>::cross(const MatrixBase<OtherDerived>& other) const
|
MatrixBase<Derived>::cross(const MatrixBase<OtherDerived>& other) const
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user