mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-03 17:24:11 +08:00
turn some macros intro constexpr functions
This commit is contained in:
parent
0f36e42169
commit
c20e908ebc
@ -42,7 +42,7 @@ public:
|
|||||||
DstAlignment = DstEvaluator::Alignment,
|
DstAlignment = DstEvaluator::Alignment,
|
||||||
SrcAlignment = SrcEvaluator::Alignment,
|
SrcAlignment = SrcEvaluator::Alignment,
|
||||||
DstHasDirectAccess = (DstFlags & DirectAccessBit) == DirectAccessBit,
|
DstHasDirectAccess = (DstFlags & DirectAccessBit) == DirectAccessBit,
|
||||||
JointAlignment = EIGEN_PLAIN_ENUM_MIN(DstAlignment,SrcAlignment)
|
JointAlignment = plain_enum_min(DstAlignment, SrcAlignment)
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -53,8 +53,8 @@ private:
|
|||||||
InnerMaxSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::MaxSizeAtCompileTime)
|
InnerMaxSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::MaxSizeAtCompileTime)
|
||||||
: int(DstFlags)&RowMajorBit ? int(Dst::MaxColsAtCompileTime)
|
: int(DstFlags)&RowMajorBit ? int(Dst::MaxColsAtCompileTime)
|
||||||
: int(Dst::MaxRowsAtCompileTime),
|
: int(Dst::MaxRowsAtCompileTime),
|
||||||
RestrictedInnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(InnerSize,MaxPacketSize),
|
RestrictedInnerSize = min_size_prefer_fixed(InnerSize, MaxPacketSize),
|
||||||
RestrictedLinearSize = EIGEN_SIZE_MIN_PREFER_FIXED(Dst::SizeAtCompileTime,MaxPacketSize),
|
RestrictedLinearSize = min_size_prefer_fixed(Dst::SizeAtCompileTime, MaxPacketSize),
|
||||||
OuterStride = int(outer_stride_at_compile_time<Dst>::ret),
|
OuterStride = int(outer_stride_at_compile_time<Dst>::ret),
|
||||||
MaxSizeAtCompileTime = Dst::SizeAtCompileTime
|
MaxSizeAtCompileTime = Dst::SizeAtCompileTime
|
||||||
};
|
};
|
||||||
|
@ -43,7 +43,7 @@ class BandMatrixBase : public EigenBase<Derived>
|
|||||||
DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic))
|
DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic))
|
||||||
? 1 + Supers + Subs
|
? 1 + Supers + Subs
|
||||||
: Dynamic,
|
: Dynamic,
|
||||||
SizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime)
|
SizeAtCompileTime = min_size_prefer_dynamic(RowsAtCompileTime,ColsAtCompileTime)
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -98,8 +98,8 @@ class BandMatrixBase : public EigenBase<Derived>
|
|||||||
DiagonalSize = (RowsAtCompileTime==Dynamic || ColsAtCompileTime==Dynamic)
|
DiagonalSize = (RowsAtCompileTime==Dynamic || ColsAtCompileTime==Dynamic)
|
||||||
? Dynamic
|
? Dynamic
|
||||||
: (ActualIndex<0
|
: (ActualIndex<0
|
||||||
? EIGEN_SIZE_MIN_PREFER_DYNAMIC(ColsAtCompileTime, RowsAtCompileTime + ActualIndex)
|
? min_size_prefer_dynamic(ColsAtCompileTime, RowsAtCompileTime + ActualIndex)
|
||||||
: EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime, ColsAtCompileTime - ActualIndex))
|
: min_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime - ActualIndex))
|
||||||
};
|
};
|
||||||
typedef Block<CoefficientsType,1, DiagonalSize> BuildType;
|
typedef Block<CoefficientsType,1, DiagonalSize> BuildType;
|
||||||
typedef typename internal::conditional<Conjugate,
|
typedef typename internal::conditional<Conjugate,
|
||||||
|
@ -657,8 +657,8 @@ struct ternary_evaluator<CwiseTernaryOp<TernaryOp, Arg1, Arg2, Arg3>, IndexBased
|
|||||||
)
|
)
|
||||||
),
|
),
|
||||||
Flags = (Flags0 & ~RowMajorBit) | (Arg1Flags & RowMajorBit),
|
Flags = (Flags0 & ~RowMajorBit) | (Arg1Flags & RowMajorBit),
|
||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(
|
Alignment = plain_enum_min(
|
||||||
EIGEN_PLAIN_ENUM_MIN(evaluator<Arg1>::Alignment, evaluator<Arg2>::Alignment),
|
plain_enum_min(evaluator<Arg1>::Alignment, evaluator<Arg2>::Alignment),
|
||||||
evaluator<Arg3>::Alignment)
|
evaluator<Arg3>::Alignment)
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -753,7 +753,7 @@ struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IndexBased, IndexBase
|
|||||||
)
|
)
|
||||||
),
|
),
|
||||||
Flags = (Flags0 & ~RowMajorBit) | (LhsFlags & RowMajorBit),
|
Flags = (Flags0 & ~RowMajorBit) | (LhsFlags & RowMajorBit),
|
||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<Lhs>::Alignment,evaluator<Rhs>::Alignment)
|
Alignment = plain_enum_min(evaluator<Lhs>::Alignment, evaluator<Rhs>::Alignment)
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
@ -902,7 +902,7 @@ struct mapbase_evaluator : evaluator_base<Derived>
|
|||||||
m_innerStride(map.innerStride()),
|
m_innerStride(map.innerStride()),
|
||||||
m_outerStride(map.outerStride())
|
m_outerStride(map.outerStride())
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(evaluator<Derived>::Flags&PacketAccessBit, internal::inner_stride_at_compile_time<Derived>::ret==1),
|
EIGEN_STATIC_ASSERT(check_implication(evaluator<Derived>::Flags&PacketAccessBit, internal::inner_stride_at_compile_time<Derived>::ret==1),
|
||||||
PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1);
|
PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1);
|
||||||
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
||||||
}
|
}
|
||||||
@ -1074,7 +1074,7 @@ struct evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel> >
|
|||||||
Alignment0 = (InnerPanel && (OuterStrideAtCompileTime!=Dynamic)
|
Alignment0 = (InnerPanel && (OuterStrideAtCompileTime!=Dynamic)
|
||||||
&& (OuterStrideAtCompileTime!=0)
|
&& (OuterStrideAtCompileTime!=0)
|
||||||
&& (((OuterStrideAtCompileTime * int(sizeof(Scalar))) % int(PacketAlignment)) == 0)) ? int(PacketAlignment) : 0,
|
&& (((OuterStrideAtCompileTime * int(sizeof(Scalar))) % int(PacketAlignment)) == 0)) ? int(PacketAlignment) : 0,
|
||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<ArgType>::Alignment, Alignment0)
|
Alignment = 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 EIGEN_STRONG_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
@ -1225,7 +1225,7 @@ struct block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel, /* HasDirectAc
|
|||||||
: 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
|
||||||
eigen_assert(((internal::UIntPtr(block.data()) % EIGEN_PLAIN_ENUM_MAX(1,evaluator<XprType>::Alignment)) == 0) && "data is not aligned");
|
eigen_assert(((internal::UIntPtr(block.data()) % plain_enum_max(1,evaluator<XprType>::Alignment)) == 0) && "data is not aligned");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1241,12 +1241,12 @@ struct evaluator<Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> >
|
|||||||
typedef Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> XprType;
|
typedef Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> XprType;
|
||||||
enum {
|
enum {
|
||||||
CoeffReadCost = evaluator<ConditionMatrixType>::CoeffReadCost
|
CoeffReadCost = evaluator<ConditionMatrixType>::CoeffReadCost
|
||||||
+ EIGEN_PLAIN_ENUM_MAX(evaluator<ThenMatrixType>::CoeffReadCost,
|
+ plain_enum_max(evaluator<ThenMatrixType>::CoeffReadCost,
|
||||||
evaluator<ElseMatrixType>::CoeffReadCost),
|
evaluator<ElseMatrixType>::CoeffReadCost),
|
||||||
|
|
||||||
Flags = (unsigned int)evaluator<ThenMatrixType>::Flags & evaluator<ElseMatrixType>::Flags & HereditaryBits,
|
Flags = (unsigned int)evaluator<ThenMatrixType>::Flags & evaluator<ElseMatrixType>::Flags & HereditaryBits,
|
||||||
|
|
||||||
Alignment = EIGEN_PLAIN_ENUM_MIN(evaluator<ThenMatrixType>::Alignment, evaluator<ElseMatrixType>::Alignment)
|
Alignment = plain_enum_min(evaluator<ThenMatrixType>::Alignment, evaluator<ElseMatrixType>::Alignment)
|
||||||
};
|
};
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
@ -674,8 +674,8 @@ template<typename Derived> class DenseBase
|
|||||||
* Only do it when debugging Eigen, as this borders on paranoia and could slow compilation down
|
* Only do it when debugging Eigen, as this borders on paranoia and could slow compilation down
|
||||||
*/
|
*/
|
||||||
#ifdef EIGEN_INTERNAL_DEBUGGING
|
#ifdef EIGEN_INTERNAL_DEBUGGING
|
||||||
EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, int(IsRowMajor))
|
EIGEN_STATIC_ASSERT((internal::check_implication(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, int(IsRowMajor))
|
||||||
&& EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, int(!IsRowMajor))),
|
&& internal::check_implication(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, int(!IsRowMajor))),
|
||||||
INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION)
|
INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -44,14 +44,14 @@ struct traits<Diagonal<MatrixType,DiagIndex> >
|
|||||||
typedef typename MatrixType::StorageKind StorageKind;
|
typedef typename MatrixType::StorageKind StorageKind;
|
||||||
enum {
|
enum {
|
||||||
RowsAtCompileTime = (int(DiagIndex) == DynamicIndex || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic
|
RowsAtCompileTime = (int(DiagIndex) == DynamicIndex || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic
|
||||||
: (EIGEN_PLAIN_ENUM_MIN(MatrixType::RowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0),
|
: (plain_enum_min(MatrixType::RowsAtCompileTime - plain_enum_max(-DiagIndex, 0),
|
||||||
MatrixType::ColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))),
|
MatrixType::ColsAtCompileTime - plain_enum_max( DiagIndex, 0))),
|
||||||
ColsAtCompileTime = 1,
|
ColsAtCompileTime = 1,
|
||||||
MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic
|
MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic
|
||||||
: DiagIndex == DynamicIndex ? EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime,
|
: DiagIndex == DynamicIndex ? min_size_prefer_fixed(MatrixType::MaxRowsAtCompileTime,
|
||||||
MatrixType::MaxColsAtCompileTime)
|
MatrixType::MaxColsAtCompileTime)
|
||||||
: (EIGEN_PLAIN_ENUM_MIN(MatrixType::MaxRowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0),
|
: (plain_enum_min(MatrixType::MaxRowsAtCompileTime - plain_enum_max(-DiagIndex, 0),
|
||||||
MatrixType::MaxColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))),
|
MatrixType::MaxColsAtCompileTime - plain_enum_max( DiagIndex, 0))),
|
||||||
MaxColsAtCompileTime = 1,
|
MaxColsAtCompileTime = 1,
|
||||||
MaskLvalueBit = is_lvalue<MatrixType>::value ? LvalueBit : 0,
|
MaskLvalueBit = is_lvalue<MatrixType>::value ? LvalueBit : 0,
|
||||||
Flags = (unsigned int)_MatrixTypeNested::Flags & (RowMajorBit | MaskLvalueBit | DirectAccessBit) & ~RowMajorBit, // FIXME DirectAccessBit should not be handled by expressions
|
Flags = (unsigned int)_MatrixTypeNested::Flags & (RowMajorBit | MaskLvalueBit | DirectAccessBit) & ~RowMajorBit, // FIXME DirectAccessBit should not be handled by expressions
|
||||||
|
@ -59,9 +59,9 @@ template<typename Lhs, typename Rhs> struct product_type
|
|||||||
Rows = traits<_Lhs>::RowsAtCompileTime,
|
Rows = traits<_Lhs>::RowsAtCompileTime,
|
||||||
MaxCols = traits<_Rhs>::MaxColsAtCompileTime,
|
MaxCols = traits<_Rhs>::MaxColsAtCompileTime,
|
||||||
Cols = traits<_Rhs>::ColsAtCompileTime,
|
Cols = traits<_Rhs>::ColsAtCompileTime,
|
||||||
MaxDepth = EIGEN_SIZE_MIN_PREFER_FIXED(traits<_Lhs>::MaxColsAtCompileTime,
|
MaxDepth = min_size_prefer_fixed(traits<_Lhs>::MaxColsAtCompileTime,
|
||||||
traits<_Rhs>::MaxRowsAtCompileTime),
|
traits<_Rhs>::MaxRowsAtCompileTime),
|
||||||
Depth = EIGEN_SIZE_MIN_PREFER_FIXED(traits<_Lhs>::ColsAtCompileTime,
|
Depth = min_size_prefer_fixed(traits<_Lhs>::ColsAtCompileTime,
|
||||||
traits<_Rhs>::RowsAtCompileTime)
|
traits<_Rhs>::RowsAtCompileTime)
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -182,12 +182,13 @@ struct gemv_static_vector_if<Scalar,Size,MaxSize,true>
|
|||||||
PacketSize = internal::packet_traits<Scalar>::size
|
PacketSize = internal::packet_traits<Scalar>::size
|
||||||
};
|
};
|
||||||
#if EIGEN_MAX_STATIC_ALIGN_BYTES!=0
|
#if EIGEN_MAX_STATIC_ALIGN_BYTES!=0
|
||||||
internal::plain_array<Scalar,EIGEN_SIZE_MIN_PREFER_FIXED(Size,MaxSize),0,EIGEN_PLAIN_ENUM_MIN(AlignedMax,PacketSize)> m_data;
|
internal::plain_array<Scalar, internal::min_size_prefer_fixed(Size, MaxSize), 0,
|
||||||
|
internal::plain_enum_min(AlignedMax, PacketSize)> m_data;
|
||||||
EIGEN_STRONG_INLINE Scalar* data() { return m_data.array; }
|
EIGEN_STRONG_INLINE Scalar* data() { return m_data.array; }
|
||||||
#else
|
#else
|
||||||
// Some architectures cannot align on the stack,
|
// Some architectures cannot align on the stack,
|
||||||
// => let's manually enforce alignment by allocating more data and return the address of the first aligned element.
|
// => let's manually enforce alignment by allocating more data and return the address of the first aligned element.
|
||||||
internal::plain_array<Scalar,EIGEN_SIZE_MIN_PREFER_FIXED(Size,MaxSize)+(ForceAlignment?EIGEN_MAX_ALIGN_BYTES:0),0> m_data;
|
internal::plain_array<Scalar, internal::min_size_prefer_fixed(Size, MaxSize)+(ForceAlignment?EIGEN_MAX_ALIGN_BYTES:0),0> m_data;
|
||||||
EIGEN_STRONG_INLINE Scalar* data() {
|
EIGEN_STRONG_INLINE Scalar* data() {
|
||||||
return ForceAlignment
|
return ForceAlignment
|
||||||
? reinterpret_cast<Scalar*>((internal::UIntPtr(m_data.array) & ~(std::size_t(EIGEN_MAX_ALIGN_BYTES-1))) + EIGEN_MAX_ALIGN_BYTES)
|
? reinterpret_cast<Scalar*>((internal::UIntPtr(m_data.array) & ~(std::size_t(EIGEN_MAX_ALIGN_BYTES-1))) + EIGEN_MAX_ALIGN_BYTES)
|
||||||
@ -225,7 +226,7 @@ template<> struct gemv_dense_selector<OnTheRight,ColMajor,true>
|
|||||||
typedef internal::blas_traits<Rhs> RhsBlasTraits;
|
typedef internal::blas_traits<Rhs> RhsBlasTraits;
|
||||||
typedef typename RhsBlasTraits::DirectLinearAccessType ActualRhsType;
|
typedef typename RhsBlasTraits::DirectLinearAccessType ActualRhsType;
|
||||||
|
|
||||||
typedef Map<Matrix<ResScalar,Dynamic,1>, EIGEN_PLAIN_ENUM_MIN(AlignedMax,internal::packet_traits<ResScalar>::size)> MappedDest;
|
typedef Map<Matrix<ResScalar,Dynamic,1>, plain_enum_min(AlignedMax, internal::packet_traits<ResScalar>::size)> MappedDest;
|
||||||
|
|
||||||
ActualLhsType actualLhs = LhsBlasTraits::extract(lhs);
|
ActualLhsType actualLhs = LhsBlasTraits::extract(lhs);
|
||||||
ActualRhsType actualRhs = RhsBlasTraits::extract(rhs);
|
ActualRhsType actualRhs = RhsBlasTraits::extract(rhs);
|
||||||
|
@ -916,8 +916,8 @@ struct random_default_impl<Scalar, false, true>
|
|||||||
#else
|
#else
|
||||||
enum { rand_bits = meta_floor_log2<(unsigned int)(RAND_MAX)+1>::value,
|
enum { rand_bits = meta_floor_log2<(unsigned int)(RAND_MAX)+1>::value,
|
||||||
scalar_bits = sizeof(Scalar) * CHAR_BIT,
|
scalar_bits = sizeof(Scalar) * CHAR_BIT,
|
||||||
shift = EIGEN_PLAIN_ENUM_MAX(0, int(rand_bits) - int(scalar_bits)),
|
shift = plain_enum_max(0, int(rand_bits) - int(scalar_bits)),
|
||||||
offset = NumTraits<Scalar>::IsSigned ? (1 << (EIGEN_PLAIN_ENUM_MIN(rand_bits,scalar_bits)-1)) : 0
|
offset = NumTraits<Scalar>::IsSigned ? (1 << (plain_enum_min(rand_bits, scalar_bits)-1)) : 0
|
||||||
};
|
};
|
||||||
return Scalar((std::rand() >> shift) - offset);
|
return Scalar((std::rand() >> shift) - offset);
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,8 +94,8 @@ template<typename Derived> class MatrixBase
|
|||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||||
/** type of the equivalent square matrix */
|
/** type of the equivalent square matrix */
|
||||||
typedef Matrix<Scalar,EIGEN_SIZE_MAX(RowsAtCompileTime,ColsAtCompileTime),
|
typedef Matrix<Scalar, internal::max_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime),
|
||||||
EIGEN_SIZE_MAX(RowsAtCompileTime,ColsAtCompileTime)> SquareMatrixType;
|
internal::max_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime)> SquareMatrixType;
|
||||||
#endif // not EIGEN_PARSED_BY_DOXYGEN
|
#endif // not EIGEN_PARSED_BY_DOXYGEN
|
||||||
|
|
||||||
/** \returns the size of the main diagonal, which is min(rows(),cols()).
|
/** \returns the size of the main diagonal, which is min(rows(),cols()).
|
||||||
|
@ -136,8 +136,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|||||||
enum { NeedsToAlign = (SizeAtCompileTime != Dynamic) && (internal::traits<Derived>::Alignment>0) };
|
enum { NeedsToAlign = (SizeAtCompileTime != Dynamic) && (internal::traits<Derived>::Alignment>0) };
|
||||||
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
|
||||||
|
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (int(Options)&RowMajor)==RowMajor), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
EIGEN_STATIC_ASSERT(internal::check_implication(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (int(Options)&RowMajor)==RowMajor), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (int(Options)&RowMajor)==0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
EIGEN_STATIC_ASSERT(internal::check_implication(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (int(Options)&RowMajor)==0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
||||||
EIGEN_STATIC_ASSERT((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
EIGEN_STATIC_ASSERT((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
||||||
EIGEN_STATIC_ASSERT((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
EIGEN_STATIC_ASSERT((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
||||||
EIGEN_STATIC_ASSERT((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
EIGEN_STATIC_ASSERT((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
|
||||||
@ -282,10 +282,10 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
|
EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
|
||||||
{
|
{
|
||||||
eigen_assert(EIGEN_IMPLIES(RowsAtCompileTime!=Dynamic,rows==RowsAtCompileTime)
|
eigen_assert(internal::check_implication(RowsAtCompileTime!=Dynamic, rows==RowsAtCompileTime)
|
||||||
&& EIGEN_IMPLIES(ColsAtCompileTime!=Dynamic,cols==ColsAtCompileTime)
|
&& internal::check_implication(ColsAtCompileTime!=Dynamic, cols==ColsAtCompileTime)
|
||||||
&& EIGEN_IMPLIES(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic,rows<=MaxRowsAtCompileTime)
|
&& internal::check_implication(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic, rows<=MaxRowsAtCompileTime)
|
||||||
&& EIGEN_IMPLIES(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic,cols<=MaxColsAtCompileTime)
|
&& internal::check_implication(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic, cols<=MaxColsAtCompileTime)
|
||||||
&& rows>=0 && cols>=0 && "Invalid sizes when resizing a matrix or array.");
|
&& rows>=0 && cols>=0 && "Invalid sizes when resizing a matrix or array.");
|
||||||
internal::check_rows_cols_for_overflow<MaxSizeAtCompileTime>::run(rows, cols);
|
internal::check_rows_cols_for_overflow<MaxSizeAtCompileTime>::run(rows, cols);
|
||||||
#ifdef EIGEN_INITIALIZE_COEFFS
|
#ifdef EIGEN_INITIALIZE_COEFFS
|
||||||
|
@ -42,7 +42,7 @@ struct traits<Product<Lhs, Rhs, Option> >
|
|||||||
MaxColsAtCompileTime = RhsTraits::MaxColsAtCompileTime,
|
MaxColsAtCompileTime = RhsTraits::MaxColsAtCompileTime,
|
||||||
|
|
||||||
// FIXME: only needed by GeneralMatrixMatrixTriangular
|
// FIXME: only needed by GeneralMatrixMatrixTriangular
|
||||||
InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(LhsTraits::ColsAtCompileTime, RhsTraits::RowsAtCompileTime),
|
InnerSize = min_size_prefer_fixed(LhsTraits::ColsAtCompileTime, RhsTraits::RowsAtCompileTime),
|
||||||
|
|
||||||
// The storage order is somewhat arbitrary here. The correct one will be determined through the evaluator.
|
// The storage order is somewhat arbitrary here. The correct one will be determined through the evaluator.
|
||||||
Flags = (MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1) ? RowMajorBit
|
Flags = (MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1) ? RowMajorBit
|
||||||
|
@ -537,7 +537,7 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|||||||
enum {
|
enum {
|
||||||
RowsAtCompileTime = LhsNestedCleaned::RowsAtCompileTime,
|
RowsAtCompileTime = LhsNestedCleaned::RowsAtCompileTime,
|
||||||
ColsAtCompileTime = RhsNestedCleaned::ColsAtCompileTime,
|
ColsAtCompileTime = RhsNestedCleaned::ColsAtCompileTime,
|
||||||
InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(LhsNestedCleaned::ColsAtCompileTime, RhsNestedCleaned::RowsAtCompileTime),
|
InnerSize = min_size_prefer_fixed(LhsNestedCleaned::ColsAtCompileTime, RhsNestedCleaned::RowsAtCompileTime),
|
||||||
MaxRowsAtCompileTime = LhsNestedCleaned::MaxRowsAtCompileTime,
|
MaxRowsAtCompileTime = LhsNestedCleaned::MaxRowsAtCompileTime,
|
||||||
MaxColsAtCompileTime = RhsNestedCleaned::MaxColsAtCompileTime
|
MaxColsAtCompileTime = RhsNestedCleaned::MaxColsAtCompileTime
|
||||||
};
|
};
|
||||||
@ -566,8 +566,8 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|||||||
RhsVecPacketSize = unpacket_traits<RhsVecPacketType>::size,
|
RhsVecPacketSize = unpacket_traits<RhsVecPacketType>::size,
|
||||||
|
|
||||||
// Here, we don't care about alignment larger than the usable packet size.
|
// Here, we don't care about alignment larger than the usable packet size.
|
||||||
LhsAlignment = EIGEN_PLAIN_ENUM_MIN(LhsEtorType::Alignment,LhsVecPacketSize*int(sizeof(typename LhsNestedCleaned::Scalar))),
|
LhsAlignment = plain_enum_min(LhsEtorType::Alignment, LhsVecPacketSize*int(sizeof(typename LhsNestedCleaned::Scalar))),
|
||||||
RhsAlignment = EIGEN_PLAIN_ENUM_MIN(RhsEtorType::Alignment,RhsVecPacketSize*int(sizeof(typename RhsNestedCleaned::Scalar))),
|
RhsAlignment = plain_enum_min(RhsEtorType::Alignment, RhsVecPacketSize*int(sizeof(typename RhsNestedCleaned::Scalar))),
|
||||||
|
|
||||||
SameType = is_same<typename LhsNestedCleaned::Scalar,typename RhsNestedCleaned::Scalar>::value,
|
SameType = is_same<typename LhsNestedCleaned::Scalar,typename RhsNestedCleaned::Scalar>::value,
|
||||||
|
|
||||||
@ -587,8 +587,8 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|||||||
LhsOuterStrideBytes = int(LhsNestedCleaned::OuterStrideAtCompileTime) * int(sizeof(typename LhsNestedCleaned::Scalar)),
|
LhsOuterStrideBytes = int(LhsNestedCleaned::OuterStrideAtCompileTime) * int(sizeof(typename LhsNestedCleaned::Scalar)),
|
||||||
RhsOuterStrideBytes = int(RhsNestedCleaned::OuterStrideAtCompileTime) * int(sizeof(typename RhsNestedCleaned::Scalar)),
|
RhsOuterStrideBytes = int(RhsNestedCleaned::OuterStrideAtCompileTime) * int(sizeof(typename RhsNestedCleaned::Scalar)),
|
||||||
|
|
||||||
Alignment = bool(CanVectorizeLhs) ? (LhsOuterStrideBytes<=0 || (int(LhsOuterStrideBytes) % EIGEN_PLAIN_ENUM_MAX(1,LhsAlignment))!=0 ? 0 : LhsAlignment)
|
Alignment = bool(CanVectorizeLhs) ? (LhsOuterStrideBytes<=0 || (int(LhsOuterStrideBytes) % plain_enum_max(1, LhsAlignment))!=0 ? 0 : LhsAlignment)
|
||||||
: bool(CanVectorizeRhs) ? (RhsOuterStrideBytes<=0 || (int(RhsOuterStrideBytes) % EIGEN_PLAIN_ENUM_MAX(1,RhsAlignment))!=0 ? 0 : RhsAlignment)
|
: bool(CanVectorizeRhs) ? (RhsOuterStrideBytes<=0 || (int(RhsOuterStrideBytes) % plain_enum_max(1, RhsAlignment))!=0 ? 0 : RhsAlignment)
|
||||||
: 0,
|
: 0,
|
||||||
|
|
||||||
/* CanVectorizeInner deserves special explanation. It does not affect the product flags. It is not used outside
|
/* CanVectorizeInner deserves special explanation. It does not affect the product flags. It is not used outside
|
||||||
@ -889,7 +889,7 @@ protected:
|
|||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
|
InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
|
||||||
DiagonalPacketLoadMode = EIGEN_PLAIN_ENUM_MIN(LoadMode,((InnerSize%16) == 0) ? int(Aligned16) : int(evaluator<DiagonalType>::Alignment)) // FIXME hardcoded 16!!
|
DiagonalPacketLoadMode = plain_enum_min(LoadMode,((InnerSize%16) == 0) ? int(Aligned16) : int(evaluator<DiagonalType>::Alignment)) // FIXME hardcoded 16!!
|
||||||
};
|
};
|
||||||
return internal::pmul(m_matImpl.template packet<LoadMode,PacketType>(row, col),
|
return internal::pmul(m_matImpl.template packet<LoadMode,PacketType>(row, col),
|
||||||
m_diagImpl.template packet<DiagonalPacketLoadMode,PacketType>(id));
|
m_diagImpl.template packet<DiagonalPacketLoadMode,PacketType>(id));
|
||||||
|
@ -240,7 +240,7 @@ struct redux_impl<Func, Evaluator, LinearVectorizedTraversal, NoUnrolling>
|
|||||||
const int packetAlignment = unpacket_traits<PacketScalar>::alignment;
|
const int packetAlignment = unpacket_traits<PacketScalar>::alignment;
|
||||||
enum {
|
enum {
|
||||||
alignment0 = (bool(Evaluator::Flags & DirectAccessBit) && bool(packet_traits<Scalar>::AlignedOnScalar)) ? int(packetAlignment) : int(Unaligned),
|
alignment0 = (bool(Evaluator::Flags & DirectAccessBit) && bool(packet_traits<Scalar>::AlignedOnScalar)) ? int(packetAlignment) : int(Unaligned),
|
||||||
alignment = EIGEN_PLAIN_ENUM_MAX(alignment0, Evaluator::Alignment)
|
alignment = plain_enum_max(alignment0, Evaluator::Alignment)
|
||||||
};
|
};
|
||||||
const Index alignedStart = internal::first_default_aligned(xpr);
|
const Index alignedStart = internal::first_default_aligned(xpr);
|
||||||
const Index alignedSize2 = ((size-alignedStart)/(2*packetSize))*(2*packetSize);
|
const Index alignedSize2 = ((size-alignedStart)/(2*packetSize))*(2*packetSize);
|
||||||
|
@ -445,7 +445,7 @@ struct reshaped_evaluator<ArgType, Rows, Cols, Order, /* HasDirectAccess */ true
|
|||||||
: mapbase_evaluator<XprType, typename XprType::PlainObject>(xpr)
|
: mapbase_evaluator<XprType, typename XprType::PlainObject>(xpr)
|
||||||
{
|
{
|
||||||
// TODO: for the 3.4 release, this should be turned to an internal assertion, but let's keep it as is for the beta lifetime
|
// TODO: for the 3.4 release, this should be turned to an internal assertion, but let's keep it as is for the beta lifetime
|
||||||
eigen_assert(((internal::UIntPtr(xpr.data()) % EIGEN_PLAIN_ENUM_MAX(1,evaluator<XprType>::Alignment)) == 0) && "data is not aligned");
|
eigen_assert(((internal::UIntPtr(xpr.data()) % plain_enum_max(1, evaluator<XprType>::Alignment)) == 0) && "data is not aligned");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -232,9 +232,9 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|||||||
typename ExtendedType<OtherDerived>::Type
|
typename ExtendedType<OtherDerived>::Type
|
||||||
extendedTo(const DenseBase<OtherDerived>& other) const
|
extendedTo(const DenseBase<OtherDerived>& other) const
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isVertical, OtherDerived::MaxColsAtCompileTime==1),
|
EIGEN_STATIC_ASSERT(internal::check_implication(isVertical, OtherDerived::MaxColsAtCompileTime==1),
|
||||||
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
|
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isHorizontal, OtherDerived::MaxRowsAtCompileTime==1),
|
EIGEN_STATIC_ASSERT(internal::check_implication(isHorizontal, OtherDerived::MaxRowsAtCompileTime==1),
|
||||||
YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
|
YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
|
||||||
return typename ExtendedType<OtherDerived>::Type
|
return typename ExtendedType<OtherDerived>::Type
|
||||||
(other.derived(),
|
(other.derived(),
|
||||||
@ -255,9 +255,9 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|||||||
typename OppositeExtendedType<OtherDerived>::Type
|
typename OppositeExtendedType<OtherDerived>::Type
|
||||||
extendedToOpposite(const DenseBase<OtherDerived>& other) const
|
extendedToOpposite(const DenseBase<OtherDerived>& other) const
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isHorizontal, OtherDerived::MaxColsAtCompileTime==1),
|
EIGEN_STATIC_ASSERT(internal::check_implication(isHorizontal, OtherDerived::MaxColsAtCompileTime==1),
|
||||||
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
|
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isVertical, OtherDerived::MaxRowsAtCompileTime==1),
|
EIGEN_STATIC_ASSERT(internal::check_implication(isVertical, OtherDerived::MaxRowsAtCompileTime==1),
|
||||||
YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
|
YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
|
||||||
return typename OppositeExtendedType<OtherDerived>::Type
|
return typename OppositeExtendedType<OtherDerived>::Type
|
||||||
(other.derived(),
|
(other.derived(),
|
||||||
|
@ -442,7 +442,7 @@ public:
|
|||||||
nr = 4,
|
nr = 4,
|
||||||
|
|
||||||
// register block size along the M direction (currently, this one cannot be modified)
|
// register block size along the M direction (currently, this one cannot be modified)
|
||||||
default_mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*LhsPacketSize,
|
default_mr = (plain_enum_min(16, NumberOfRegisters)/2/nr)*LhsPacketSize,
|
||||||
#if defined(EIGEN_HAS_SINGLE_INSTRUCTION_MADD) && !defined(EIGEN_VECTORIZE_ALTIVEC) && !defined(EIGEN_VECTORIZE_VSX) \
|
#if defined(EIGEN_HAS_SINGLE_INSTRUCTION_MADD) && !defined(EIGEN_VECTORIZE_ALTIVEC) && !defined(EIGEN_VECTORIZE_VSX) \
|
||||||
&& ((!EIGEN_COMP_MSVC) || (EIGEN_COMP_MSVC>=1914))
|
&& ((!EIGEN_COMP_MSVC) || (EIGEN_COMP_MSVC>=1914))
|
||||||
// we assume 16 registers or more
|
// we assume 16 registers or more
|
||||||
@ -571,7 +571,7 @@ public:
|
|||||||
// we assume 16 registers
|
// we assume 16 registers
|
||||||
mr = 3*LhsPacketSize,
|
mr = 3*LhsPacketSize,
|
||||||
#else
|
#else
|
||||||
mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*LhsPacketSize,
|
mr = (plain_enum_min(16, NumberOfRegisters)/2/nr)*LhsPacketSize,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LhsProgress = LhsPacketSize,
|
LhsProgress = LhsPacketSize,
|
||||||
@ -954,7 +954,7 @@ public:
|
|||||||
NumberOfRegisters = EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS,
|
NumberOfRegisters = EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS,
|
||||||
// FIXME: should depend on NumberOfRegisters
|
// FIXME: should depend on NumberOfRegisters
|
||||||
nr = 4,
|
nr = 4,
|
||||||
mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*ResPacketSize,
|
mr = (plain_enum_min(16, NumberOfRegisters)/2/nr)*ResPacketSize,
|
||||||
|
|
||||||
LhsProgress = ResPacketSize,
|
LhsProgress = ResPacketSize,
|
||||||
RhsProgress = 1
|
RhsProgress = 1
|
||||||
|
@ -422,7 +422,7 @@ struct generic_product_impl<Lhs,Rhs,DenseShape,DenseShape,GemmProduct>
|
|||||||
typedef typename internal::remove_all<ActualRhsType>::type ActualRhsTypeCleaned;
|
typedef typename internal::remove_all<ActualRhsType>::type ActualRhsTypeCleaned;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MaxDepthAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(Lhs::MaxColsAtCompileTime,Rhs::MaxRowsAtCompileTime)
|
MaxDepthAtCompileTime = min_size_prefer_fixed(Lhs::MaxColsAtCompileTime, Rhs::MaxRowsAtCompileTime)
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef generic_product_impl<Lhs,Rhs,DenseShape,DenseShape,CoeffBasedProductMode> lazyproduct;
|
typedef generic_product_impl<Lhs,Rhs,DenseShape,DenseShape,CoeffBasedProductMode> lazyproduct;
|
||||||
|
@ -144,7 +144,7 @@ struct tribb_kernel
|
|||||||
typedef typename Traits::ResScalar ResScalar;
|
typedef typename Traits::ResScalar ResScalar;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
BlockSize = meta_least_common_multiple<EIGEN_PLAIN_ENUM_MAX(mr,nr),EIGEN_PLAIN_ENUM_MIN(mr,nr)>::ret
|
BlockSize = meta_least_common_multiple<plain_enum_max(mr, nr), plain_enum_min(mr,nr)>::ret
|
||||||
};
|
};
|
||||||
void operator()(ResScalar* _res, Index resIncr, Index resStride, const LhsScalar* blockA, const RhsScalar* blockB, Index size, Index depth, const ResScalar& alpha)
|
void operator()(ResScalar* _res, Index resIncr, Index resStride, const LhsScalar* blockA, const RhsScalar* blockB, Index size, Index depth, const ResScalar& alpha)
|
||||||
{
|
{
|
||||||
|
@ -314,10 +314,10 @@ struct product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,LhsSelfAdjoint,Co
|
|||||||
const Scalar& alpha, level3_blocking<Scalar,Scalar>& blocking)
|
const Scalar& alpha, level3_blocking<Scalar,Scalar>& blocking)
|
||||||
{
|
{
|
||||||
product_selfadjoint_matrix<Scalar, Index,
|
product_selfadjoint_matrix<Scalar, Index,
|
||||||
EIGEN_LOGICAL_XOR(RhsSelfAdjoint,RhsStorageOrder==RowMajor) ? ColMajor : RowMajor,
|
logical_xor(RhsSelfAdjoint,RhsStorageOrder==RowMajor) ? ColMajor : RowMajor,
|
||||||
RhsSelfAdjoint, NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(RhsSelfAdjoint,ConjugateRhs),
|
RhsSelfAdjoint, NumTraits<Scalar>::IsComplex && logical_xor(RhsSelfAdjoint, ConjugateRhs),
|
||||||
EIGEN_LOGICAL_XOR(LhsSelfAdjoint,LhsStorageOrder==RowMajor) ? ColMajor : RowMajor,
|
logical_xor(LhsSelfAdjoint,LhsStorageOrder==RowMajor) ? ColMajor : RowMajor,
|
||||||
LhsSelfAdjoint, NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(LhsSelfAdjoint,ConjugateLhs),
|
LhsSelfAdjoint, NumTraits<Scalar>::IsComplex && logical_xor(LhsSelfAdjoint, ConjugateLhs),
|
||||||
ColMajor,ResInnerStride>
|
ColMajor,ResInnerStride>
|
||||||
::run(cols, rows, rhs, rhsStride, lhs, lhsStride, res, resIncr, resStride, alpha, blocking);
|
::run(cols, rows, rhs, rhsStride, lhs, lhsStride, res, resIncr, resStride, alpha, blocking);
|
||||||
}
|
}
|
||||||
@ -523,10 +523,10 @@ struct selfadjoint_product_impl<Lhs,LhsMode,false,Rhs,RhsMode,false>
|
|||||||
BlockingType blocking(lhs.rows(), rhs.cols(), lhs.cols(), 1, false);
|
BlockingType blocking(lhs.rows(), rhs.cols(), lhs.cols(), 1, false);
|
||||||
|
|
||||||
internal::product_selfadjoint_matrix<Scalar, Index,
|
internal::product_selfadjoint_matrix<Scalar, Index,
|
||||||
EIGEN_LOGICAL_XOR(LhsIsUpper,internal::traits<Lhs>::Flags &RowMajorBit) ? RowMajor : ColMajor, LhsIsSelfAdjoint,
|
internal::logical_xor(LhsIsUpper, internal::traits<Lhs>::Flags &RowMajorBit) ? RowMajor : ColMajor, LhsIsSelfAdjoint,
|
||||||
NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(LhsIsUpper,bool(LhsBlasTraits::NeedToConjugate)),
|
NumTraits<Scalar>::IsComplex && internal::logical_xor(LhsIsUpper, bool(LhsBlasTraits::NeedToConjugate)),
|
||||||
EIGEN_LOGICAL_XOR(RhsIsUpper,internal::traits<Rhs>::Flags &RowMajorBit) ? RowMajor : ColMajor, RhsIsSelfAdjoint,
|
internal::logical_xor(RhsIsUpper, internal::traits<Rhs>::Flags &RowMajorBit) ? RowMajor : ColMajor, RhsIsSelfAdjoint,
|
||||||
NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(RhsIsUpper,bool(RhsBlasTraits::NeedToConjugate)),
|
NumTraits<Scalar>::IsComplex && internal::logical_xor(RhsIsUpper, bool(RhsBlasTraits::NeedToConjugate)),
|
||||||
internal::traits<Dest>::Flags&RowMajorBit ? RowMajor : ColMajor,
|
internal::traits<Dest>::Flags&RowMajorBit ? RowMajor : ColMajor,
|
||||||
Dest::InnerStrideAtCompileTime>
|
Dest::InnerStrideAtCompileTime>
|
||||||
::run(
|
::run(
|
||||||
|
@ -57,12 +57,12 @@ void selfadjoint_matrix_vector_product<Scalar,Index,StorageOrder,UpLo,ConjugateL
|
|||||||
FirstTriangular = IsRowMajor == IsLower
|
FirstTriangular = IsRowMajor == IsLower
|
||||||
};
|
};
|
||||||
|
|
||||||
conj_helper<Scalar,Scalar,NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(ConjugateLhs, IsRowMajor), ConjugateRhs> cj0;
|
conj_helper<Scalar,Scalar,NumTraits<Scalar>::IsComplex && logical_xor(ConjugateLhs, IsRowMajor), ConjugateRhs> cj0;
|
||||||
conj_helper<Scalar,Scalar,NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(ConjugateLhs, !IsRowMajor), ConjugateRhs> cj1;
|
conj_helper<Scalar,Scalar,NumTraits<Scalar>::IsComplex && logical_xor(ConjugateLhs, !IsRowMajor), ConjugateRhs> cj1;
|
||||||
conj_helper<RealScalar,Scalar,false, ConjugateRhs> cjd;
|
conj_helper<RealScalar,Scalar,false, ConjugateRhs> cjd;
|
||||||
|
|
||||||
conj_helper<Packet,Packet,NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(ConjugateLhs, IsRowMajor), ConjugateRhs> pcj0;
|
conj_helper<Packet,Packet,NumTraits<Scalar>::IsComplex && logical_xor(ConjugateLhs, IsRowMajor), ConjugateRhs> pcj0;
|
||||||
conj_helper<Packet,Packet,NumTraits<Scalar>::IsComplex && EIGEN_LOGICAL_XOR(ConjugateLhs, !IsRowMajor), ConjugateRhs> pcj1;
|
conj_helper<Packet,Packet,NumTraits<Scalar>::IsComplex && logical_xor(ConjugateLhs, !IsRowMajor), ConjugateRhs> pcj1;
|
||||||
|
|
||||||
Scalar cjAlpha = ConjugateRhs ? numext::conj(alpha) : alpha;
|
Scalar cjAlpha = ConjugateRhs ? numext::conj(alpha) : alpha;
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ struct selfadjoint_product_impl<Lhs,LhsMode,false,Rhs,0,true>
|
|||||||
{
|
{
|
||||||
typedef typename Dest::Scalar ResScalar;
|
typedef typename Dest::Scalar ResScalar;
|
||||||
typedef typename Rhs::Scalar RhsScalar;
|
typedef typename Rhs::Scalar RhsScalar;
|
||||||
typedef Map<Matrix<ResScalar,Dynamic,1>, EIGEN_PLAIN_ENUM_MIN(AlignedMax,internal::packet_traits<ResScalar>::size)> MappedDest;
|
typedef Map<Matrix<ResScalar,Dynamic,1>, plain_enum_min(AlignedMax,internal::packet_traits<ResScalar>::size)> MappedDest;
|
||||||
|
|
||||||
eigen_assert(dest.rows()==a_lhs.rows() && dest.cols()==a_rhs.cols());
|
eigen_assert(dest.rows()==a_lhs.rows() && dest.cols()==a_rhs.cols());
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ struct product_triangular_matrix_matrix<Scalar,Index,Mode,true,
|
|||||||
|
|
||||||
typedef gebp_traits<Scalar,Scalar> Traits;
|
typedef gebp_traits<Scalar,Scalar> Traits;
|
||||||
enum {
|
enum {
|
||||||
SmallPanelWidth = 2 * EIGEN_PLAIN_ENUM_MAX(Traits::mr,Traits::nr),
|
SmallPanelWidth = 2 * plain_enum_max(Traits::mr, Traits::nr),
|
||||||
IsLower = (Mode&Lower) == Lower,
|
IsLower = (Mode&Lower) == Lower,
|
||||||
SetDiag = (Mode&(ZeroDiag|UnitDiag)) ? 0 : 1
|
SetDiag = (Mode&(ZeroDiag|UnitDiag)) ? 0 : 1
|
||||||
};
|
};
|
||||||
@ -249,7 +249,7 @@ struct product_triangular_matrix_matrix<Scalar,Index,Mode,false,
|
|||||||
{
|
{
|
||||||
typedef gebp_traits<Scalar,Scalar> Traits;
|
typedef gebp_traits<Scalar,Scalar> Traits;
|
||||||
enum {
|
enum {
|
||||||
SmallPanelWidth = EIGEN_PLAIN_ENUM_MAX(Traits::mr,Traits::nr),
|
SmallPanelWidth = plain_enum_max(Traits::mr, Traits::nr),
|
||||||
IsLower = (Mode&Lower) == Lower,
|
IsLower = (Mode&Lower) == Lower,
|
||||||
SetDiag = (Mode&(ZeroDiag|UnitDiag)) ? 0 : 1
|
SetDiag = (Mode&(ZeroDiag|UnitDiag)) ? 0 : 1
|
||||||
};
|
};
|
||||||
|
@ -218,7 +218,7 @@ template<int Mode> struct trmv_selector<Mode,ColMajor>
|
|||||||
typedef internal::blas_traits<Rhs> RhsBlasTraits;
|
typedef internal::blas_traits<Rhs> RhsBlasTraits;
|
||||||
typedef typename RhsBlasTraits::DirectLinearAccessType ActualRhsType;
|
typedef typename RhsBlasTraits::DirectLinearAccessType ActualRhsType;
|
||||||
|
|
||||||
typedef Map<Matrix<ResScalar,Dynamic,1>, EIGEN_PLAIN_ENUM_MIN(AlignedMax,internal::packet_traits<ResScalar>::size)> MappedDest;
|
typedef Map<Matrix<ResScalar,Dynamic,1>, plain_enum_min(AlignedMax,internal::packet_traits<ResScalar>::size)> MappedDest;
|
||||||
|
|
||||||
typename internal::add_const_on_value_type<ActualLhsType>::type actualLhs = LhsBlasTraits::extract(lhs);
|
typename internal::add_const_on_value_type<ActualLhsType>::type actualLhs = LhsBlasTraits::extract(lhs);
|
||||||
typename internal::add_const_on_value_type<ActualRhsType>::type actualRhs = RhsBlasTraits::extract(rhs);
|
typename internal::add_const_on_value_type<ActualRhsType>::type actualRhs = RhsBlasTraits::extract(rhs);
|
||||||
|
@ -63,7 +63,7 @@ EIGEN_DONT_INLINE void triangular_solve_matrix<Scalar,Index,OnTheLeft,Mode,Conju
|
|||||||
typedef gebp_traits<Scalar,Scalar> Traits;
|
typedef gebp_traits<Scalar,Scalar> Traits;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SmallPanelWidth = EIGEN_PLAIN_ENUM_MAX(Traits::mr,Traits::nr),
|
SmallPanelWidth = plain_enum_max(Traits::mr, Traits::nr),
|
||||||
IsLower = (Mode&Lower) == Lower
|
IsLower = (Mode&Lower) == Lower
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ EIGEN_DONT_INLINE void triangular_solve_matrix<Scalar,Index,OnTheRight,Mode,Conj
|
|||||||
typedef gebp_traits<Scalar,Scalar> Traits;
|
typedef gebp_traits<Scalar,Scalar> Traits;
|
||||||
enum {
|
enum {
|
||||||
RhsStorageOrder = TriStorageOrder,
|
RhsStorageOrder = TriStorageOrder,
|
||||||
SmallPanelWidth = EIGEN_PLAIN_ENUM_MAX(Traits::mr,Traits::nr),
|
SmallPanelWidth = plain_enum_max(Traits::mr, Traits::nr),
|
||||||
IsLower = (Mode&Lower) == Lower
|
IsLower = (Mode&Lower) == Lower
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1107,35 +1107,6 @@ namespace Eigen {
|
|||||||
typedef typename Base::PacketScalar PacketScalar;
|
typedef typename Base::PacketScalar PacketScalar;
|
||||||
|
|
||||||
|
|
||||||
#define EIGEN_PLAIN_ENUM_MIN(a,b) (((int)a <= (int)b) ? (int)a : (int)b)
|
|
||||||
#define EIGEN_PLAIN_ENUM_MAX(a,b) (((int)a >= (int)b) ? (int)a : (int)b)
|
|
||||||
|
|
||||||
// EIGEN_SIZE_MIN_PREFER_DYNAMIC gives the min between compile-time sizes. 0 has absolute priority, followed by 1,
|
|
||||||
// followed by Dynamic, followed by other finite values. The reason for giving Dynamic the priority over
|
|
||||||
// finite values is that min(3, Dynamic) should be Dynamic, since that could be anything between 0 and 3.
|
|
||||||
#define EIGEN_SIZE_MIN_PREFER_DYNAMIC(a,b) (((int)a == 0 || (int)b == 0) ? 0 \
|
|
||||||
: ((int)a == 1 || (int)b == 1) ? 1 \
|
|
||||||
: ((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \
|
|
||||||
: ((int)a <= (int)b) ? (int)a : (int)b)
|
|
||||||
|
|
||||||
// EIGEN_SIZE_MIN_PREFER_FIXED is a variant of EIGEN_SIZE_MIN_PREFER_DYNAMIC comparing MaxSizes. The difference is that finite values
|
|
||||||
// now have priority over Dynamic, so that min(3, Dynamic) gives 3. Indeed, whatever the actual value is
|
|
||||||
// (between 0 and 3), it is not more than 3.
|
|
||||||
#define EIGEN_SIZE_MIN_PREFER_FIXED(a,b) (((int)a == 0 || (int)b == 0) ? 0 \
|
|
||||||
: ((int)a == 1 || (int)b == 1) ? 1 \
|
|
||||||
: ((int)a == Dynamic && (int)b == Dynamic) ? Dynamic \
|
|
||||||
: ((int)a == Dynamic) ? (int)b \
|
|
||||||
: ((int)b == Dynamic) ? (int)a \
|
|
||||||
: ((int)a <= (int)b) ? (int)a : (int)b)
|
|
||||||
|
|
||||||
// see EIGEN_SIZE_MIN_PREFER_DYNAMIC. No need for a separate variant for MaxSizes here.
|
|
||||||
#define EIGEN_SIZE_MAX(a,b) (((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \
|
|
||||||
: ((int)a >= (int)b) ? (int)a : (int)b)
|
|
||||||
|
|
||||||
#define EIGEN_LOGICAL_XOR(a,b) (((a) || (b)) && !((a) && (b)))
|
|
||||||
|
|
||||||
#define EIGEN_IMPLIES(a,b) (!(a) || (b))
|
|
||||||
|
|
||||||
#if EIGEN_HAS_BUILTIN(__builtin_expect) || EIGEN_COMP_GNUC
|
#if EIGEN_HAS_BUILTIN(__builtin_expect) || EIGEN_COMP_GNUC
|
||||||
#define EIGEN_PREDICT_FALSE(x) (__builtin_expect(x, false))
|
#define EIGEN_PREDICT_FALSE(x) (__builtin_expect(x, false))
|
||||||
#define EIGEN_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
|
#define EIGEN_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
|
||||||
|
@ -579,6 +579,82 @@ bool not_equal_strict(const double& x,const double& y) { return std::not_equal_t
|
|||||||
|
|
||||||
} // end namespace numext
|
} // end namespace numext
|
||||||
|
|
||||||
|
namespace internal {
|
||||||
|
/// \internal Returns true if its argument is of integer or enum type.
|
||||||
|
/// FIXME this has the same purpose as `is_valid_index_type` in XprHelper.h
|
||||||
|
template<typename A>
|
||||||
|
constexpr bool is_int_or_enum_v = std::is_enum<A>::value || std::is_integral<A>::value;
|
||||||
|
|
||||||
|
/// \internal Gets the minimum of two values which may be integers or enums
|
||||||
|
template<typename A, typename B>
|
||||||
|
inline constexpr int plain_enum_min(A a, B b) {
|
||||||
|
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
||||||
|
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
||||||
|
return ((int) a <= (int) b) ? (int) a : (int) b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \internal Gets the maximum of two values which may be integers or enums
|
||||||
|
template<typename A, typename B>
|
||||||
|
inline constexpr int plain_enum_max(A a, B b) {
|
||||||
|
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
||||||
|
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
||||||
|
return ((int) a >= (int) b) ? (int) a : (int) b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
* `min_size_prefer_dynamic` gives the min between compile-time sizes. 0 has absolute priority, followed by 1,
|
||||||
|
* followed by Dynamic, followed by other finite values. The reason for giving Dynamic the priority over
|
||||||
|
* finite values is that min(3, Dynamic) should be Dynamic, since that could be anything between 0 and 3.
|
||||||
|
*/
|
||||||
|
template<typename A, typename B>
|
||||||
|
inline constexpr int min_size_prefer_dynamic(A a, B b) {
|
||||||
|
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
||||||
|
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
||||||
|
if ((int) a == 0 || (int) b == 0) return 0;
|
||||||
|
if ((int) a == 1 || (int) b == 1) return 1;
|
||||||
|
if ((int) a == Dynamic || (int) b == Dynamic) return Dynamic;
|
||||||
|
return plain_enum_min(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
* min_size_prefer_fixed is a variant of `min_size_prefer_dynamic` comparing MaxSizes. The difference is that finite values
|
||||||
|
* now have priority over Dynamic, so that min(3, Dynamic) gives 3. Indeed, whatever the actual value is
|
||||||
|
* (between 0 and 3), it is not more than 3.
|
||||||
|
*/
|
||||||
|
template<typename A, typename B>
|
||||||
|
inline constexpr int min_size_prefer_fixed(A a, B b) {
|
||||||
|
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
||||||
|
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
||||||
|
if ((int) a == 0 || (int) b == 0) return 0;
|
||||||
|
if ((int) a == 1 || (int) b == 1) return 1;
|
||||||
|
if ((int) a == Dynamic && (int) b == Dynamic) return Dynamic;
|
||||||
|
if ((int) a == Dynamic) return (int) b;
|
||||||
|
if ((int) b == Dynamic) return (int) a;
|
||||||
|
return plain_enum_min(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \internal see `min_size_prefer_fixed`. No need for a separate variant for MaxSizes here.
|
||||||
|
template<typename A, typename B>
|
||||||
|
inline constexpr int max_size_prefer_dynamic(A a, B b) {
|
||||||
|
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
||||||
|
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
||||||
|
if ((int) a == Dynamic || (int) b == Dynamic) return Dynamic;
|
||||||
|
return plain_enum_max(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \internal Calculate logical XOR at compile time
|
||||||
|
inline constexpr bool logical_xor(bool a, bool b) {
|
||||||
|
return (a || b) && !(a && b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \internal Calculate logical IMPLIES at compile time
|
||||||
|
inline constexpr bool check_implication(bool a, bool b) {
|
||||||
|
return !a || b;
|
||||||
|
}
|
||||||
|
} // end namespace internal
|
||||||
|
|
||||||
} // end namespace Eigen
|
} // end namespace Eigen
|
||||||
|
|
||||||
#endif // EIGEN_META_H
|
#endif // EIGEN_META_H
|
||||||
|
@ -646,8 +646,9 @@ struct plain_col_type
|
|||||||
template<typename ExpressionType, typename Scalar = typename ExpressionType::Scalar>
|
template<typename ExpressionType, typename Scalar = typename ExpressionType::Scalar>
|
||||||
struct plain_diag_type
|
struct plain_diag_type
|
||||||
{
|
{
|
||||||
enum { diag_size = EIGEN_SIZE_MIN_PREFER_DYNAMIC(ExpressionType::RowsAtCompileTime, ExpressionType::ColsAtCompileTime),
|
enum { diag_size = internal::min_size_prefer_dynamic(ExpressionType::RowsAtCompileTime, ExpressionType::ColsAtCompileTime),
|
||||||
max_diag_size = EIGEN_SIZE_MIN_PREFER_FIXED(ExpressionType::MaxRowsAtCompileTime, ExpressionType::MaxColsAtCompileTime)
|
max_diag_size = min_size_prefer_fixed(ExpressionType::MaxRowsAtCompileTime,
|
||||||
|
ExpressionType::MaxColsAtCompileTime)
|
||||||
};
|
};
|
||||||
typedef Matrix<Scalar, diag_size, 1, ExpressionType::PlainObject::Options & ~RowMajor, max_diag_size, 1> MatrixDiagType;
|
typedef Matrix<Scalar, diag_size, 1, ExpressionType::PlainObject::Options & ~RowMajor, max_diag_size, 1> MatrixDiagType;
|
||||||
typedef Array<Scalar, diag_size, 1, ExpressionType::PlainObject::Options & ~RowMajor, max_diag_size, 1> ArrayDiagType;
|
typedef Array<Scalar, diag_size, 1, ExpressionType::PlainObject::Options & ~RowMajor, max_diag_size, 1> ArrayDiagType;
|
||||||
|
@ -319,12 +319,12 @@ public:
|
|||||||
check_template_params();
|
check_template_params();
|
||||||
// prevent conversions as:
|
// prevent conversions as:
|
||||||
// Affine | AffineCompact | Isometry = Projective
|
// Affine | AffineCompact | Isometry = Projective
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(OtherMode==int(Projective), Mode==int(Projective)),
|
EIGEN_STATIC_ASSERT(internal::check_implication(OtherMode==int(Projective), Mode==int(Projective)),
|
||||||
YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)
|
YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)
|
||||||
|
|
||||||
// prevent conversions as:
|
// prevent conversions as:
|
||||||
// Isometry = Affine | AffineCompact
|
// Isometry = Affine | AffineCompact
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(OtherMode==int(Affine)||OtherMode==int(AffineCompact), Mode!=int(Isometry)),
|
EIGEN_STATIC_ASSERT(internal::check_implication(OtherMode==int(Affine)||OtherMode==int(AffineCompact), Mode!=int(Isometry)),
|
||||||
YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)
|
YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)
|
||||||
|
|
||||||
enum { ModeIsAffineCompact = Mode == int(AffineCompact),
|
enum { ModeIsAffineCompact = Mode == int(AffineCompact),
|
||||||
@ -1404,7 +1404,7 @@ struct transform_right_product_impl< TransformType, MatrixType, 2, 1> // rhs is
|
|||||||
Dim = TransformType::Dim,
|
Dim = TransformType::Dim,
|
||||||
HDim = TransformType::HDim,
|
HDim = TransformType::HDim,
|
||||||
OtherRows = MatrixType::RowsAtCompileTime,
|
OtherRows = MatrixType::RowsAtCompileTime,
|
||||||
WorkingRows = EIGEN_PLAIN_ENUM_MIN(TransformMatrix::RowsAtCompileTime,HDim)
|
WorkingRows = plain_enum_min(TransformMatrix::RowsAtCompileTime, HDim)
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef typename MatrixType::PlainObject ResultType;
|
typedef typename MatrixType::PlainObject ResultType;
|
||||||
|
@ -34,7 +34,7 @@ template<typename MatrixType, typename OtherMatrixType>
|
|||||||
struct umeyama_transform_matrix_type
|
struct umeyama_transform_matrix_type
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
MinRowsAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(MatrixType::RowsAtCompileTime, OtherMatrixType::RowsAtCompileTime),
|
MinRowsAtCompileTime = internal::min_size_prefer_dynamic(MatrixType::RowsAtCompileTime, OtherMatrixType::RowsAtCompileTime),
|
||||||
|
|
||||||
// When possible we want to choose some small fixed size value since the result
|
// When possible we want to choose some small fixed size value since the result
|
||||||
// is likely to fit on the stack. So here, EIGEN_SIZE_MIN_PREFER_DYNAMIC is not what we want.
|
// is likely to fit on the stack. So here, EIGEN_SIZE_MIN_PREFER_DYNAMIC is not what we want.
|
||||||
@ -104,7 +104,7 @@ umeyama(const MatrixBase<Derived>& src, const MatrixBase<OtherDerived>& dst, boo
|
|||||||
EIGEN_STATIC_ASSERT((internal::is_same<Scalar, typename internal::traits<OtherDerived>::Scalar>::value),
|
EIGEN_STATIC_ASSERT((internal::is_same<Scalar, typename internal::traits<OtherDerived>::Scalar>::value),
|
||||||
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
|
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
|
||||||
|
|
||||||
enum { Dimension = EIGEN_SIZE_MIN_PREFER_DYNAMIC(Derived::RowsAtCompileTime, OtherDerived::RowsAtCompileTime) };
|
enum { Dimension = internal::min_size_prefer_dynamic(Derived::RowsAtCompileTime, OtherDerived::RowsAtCompileTime) };
|
||||||
|
|
||||||
typedef Matrix<Scalar, Dimension, 1> VectorType;
|
typedef Matrix<Scalar, Dimension, 1> VectorType;
|
||||||
typedef Matrix<Scalar, Dimension, Dimension> MatrixType;
|
typedef Matrix<Scalar, Dimension, Dimension> MatrixType;
|
||||||
|
@ -208,7 +208,7 @@ public:
|
|||||||
&& (!NumTraits<Scalar>::IsComplex)
|
&& (!NumTraits<Scalar>::IsComplex)
|
||||||
};
|
};
|
||||||
typedef typename internal::conditional<TransposeInput,Transpose<const ActualMatrixType>, ActualMatrixType const&>::type RowMajorWrapper;
|
typedef typename internal::conditional<TransposeInput,Transpose<const ActualMatrixType>, ActualMatrixType const&>::type RowMajorWrapper;
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(MatrixWrapper::MatrixFree,UpLo==(Lower|Upper)),MATRIX_FREE_CONJUGATE_GRADIENT_IS_COMPATIBLE_WITH_UPPER_UNION_LOWER_MODE_ONLY);
|
EIGEN_STATIC_ASSERT(internal::check_implication(MatrixWrapper::MatrixFree,UpLo==(Lower|Upper)),MATRIX_FREE_CONJUGATE_GRADIENT_IS_COMPATIBLE_WITH_UPPER_UNION_LOWER_MODE_ONLY);
|
||||||
typedef typename internal::conditional<UpLo==(Lower|Upper),
|
typedef typename internal::conditional<UpLo==(Lower|Upper),
|
||||||
RowMajorWrapper,
|
RowMajorWrapper,
|
||||||
typename MatrixWrapper::template ConstSelfAdjointViewReturnType<UpLo>::Type
|
typename MatrixWrapper::template ConstSelfAdjointViewReturnType<UpLo>::Type
|
||||||
|
@ -474,7 +474,7 @@ void /*EIGEN_DONT_INLINE*/ apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x
|
|||||||
apply_rotation_in_the_plane_selector<
|
apply_rotation_in_the_plane_selector<
|
||||||
Scalar,OtherScalar,
|
Scalar,OtherScalar,
|
||||||
VectorX::SizeAtCompileTime,
|
VectorX::SizeAtCompileTime,
|
||||||
EIGEN_PLAIN_ENUM_MIN(evaluator<VectorX>::Alignment, evaluator<VectorY>::Alignment),
|
plain_enum_min(evaluator<VectorX>::Alignment, evaluator<VectorY>::Alignment),
|
||||||
Vectorizable>::run(x,incrx,y,incry,size,c,s);
|
Vectorizable>::run(x,incrx,y,incry,size,c,s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,7 +616,7 @@ struct kernel_retval<FullPivLU<MatrixType_> >
|
|||||||
{
|
{
|
||||||
EIGEN_MAKE_KERNEL_HELPERS(FullPivLU<MatrixType_>)
|
EIGEN_MAKE_KERNEL_HELPERS(FullPivLU<MatrixType_>)
|
||||||
|
|
||||||
enum { MaxSmallDimAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(
|
enum { MaxSmallDimAtCompileTime = min_size_prefer_fixed(
|
||||||
MatrixType::MaxColsAtCompileTime,
|
MatrixType::MaxColsAtCompileTime,
|
||||||
MatrixType::MaxRowsAtCompileTime)
|
MatrixType::MaxRowsAtCompileTime)
|
||||||
};
|
};
|
||||||
@ -702,7 +702,7 @@ struct image_retval<FullPivLU<MatrixType_> >
|
|||||||
{
|
{
|
||||||
EIGEN_MAKE_IMAGE_HELPERS(FullPivLU<MatrixType_>)
|
EIGEN_MAKE_IMAGE_HELPERS(FullPivLU<MatrixType_>)
|
||||||
|
|
||||||
enum { MaxSmallDimAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(
|
enum { MaxSmallDimAtCompileTime = min_size_prefer_fixed(
|
||||||
MatrixType::MaxColsAtCompileTime,
|
MatrixType::MaxColsAtCompileTime,
|
||||||
MatrixType::MaxRowsAtCompileTime)
|
MatrixType::MaxRowsAtCompileTime)
|
||||||
};
|
};
|
||||||
|
@ -311,7 +311,7 @@ struct Assignment<DstXprType, Inverse<XprType>, internal::assign_op<typename Dst
|
|||||||
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
||||||
dst.resize(dstRows, dstCols);
|
dst.resize(dstRows, dstCols);
|
||||||
|
|
||||||
const int Size = EIGEN_PLAIN_ENUM_MIN(XprType::ColsAtCompileTime,DstXprType::ColsAtCompileTime);
|
const int Size = plain_enum_min(XprType::ColsAtCompileTime, DstXprType::ColsAtCompileTime);
|
||||||
EIGEN_ONLY_USED_FOR_DEBUG(Size);
|
EIGEN_ONLY_USED_FOR_DEBUG(Size);
|
||||||
eigen_assert(( (Size<=1) || (Size>4) || (extract_data(src.nestedExpression())!=extract_data(dst)))
|
eigen_assert(( (Size<=1) || (Size>4) || (extract_data(src.nestedExpression())!=extract_data(dst)))
|
||||||
&& "Aliasing problem detected in inverse(), you need to do inverse().eval() here.");
|
&& "Aliasing problem detected in inverse(), you need to do inverse().eval() here.");
|
||||||
|
@ -514,7 +514,7 @@ void partial_lu_inplace(MatrixType& lu, TranspositionType& row_transpositions, t
|
|||||||
partial_lu_impl
|
partial_lu_impl
|
||||||
< typename MatrixType::Scalar, MatrixType::Flags&RowMajorBit?RowMajor:ColMajor,
|
< typename MatrixType::Scalar, MatrixType::Flags&RowMajorBit?RowMajor:ColMajor,
|
||||||
typename TranspositionType::StorageIndex,
|
typename TranspositionType::StorageIndex,
|
||||||
EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::RowsAtCompileTime,MatrixType::ColsAtCompileTime)>
|
internal::min_size_prefer_fixed(MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime)>
|
||||||
::blocked_lu(lu.rows(), lu.cols(), &lu.coeffRef(0,0), lu.outerStride(), &row_transpositions.coeffRef(0), nb_transpositions);
|
::blocked_lu(lu.rows(), lu.cols(), &lu.coeffRef(0,0), lu.outerStride(), &row_transpositions.coeffRef(0), nb_transpositions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,8 +76,8 @@ template<typename MatrixType_> class FullPivHouseholderQR
|
|||||||
typedef internal::FullPivHouseholderQRMatrixQReturnType<MatrixType> MatrixQReturnType;
|
typedef internal::FullPivHouseholderQRMatrixQReturnType<MatrixType> MatrixQReturnType;
|
||||||
typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
|
typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
|
||||||
typedef Matrix<StorageIndex, 1,
|
typedef Matrix<StorageIndex, 1,
|
||||||
EIGEN_SIZE_MIN_PREFER_DYNAMIC(ColsAtCompileTime,RowsAtCompileTime), RowMajor, 1,
|
internal::min_size_prefer_dynamic(ColsAtCompileTime,RowsAtCompileTime), RowMajor, 1,
|
||||||
EIGEN_SIZE_MIN_PREFER_FIXED(MaxColsAtCompileTime,MaxRowsAtCompileTime)> IntDiagSizeVectorType;
|
internal::min_size_prefer_fixed(MaxColsAtCompileTime, MaxRowsAtCompileTime)> IntDiagSizeVectorType;
|
||||||
typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime> PermutationType;
|
typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime> PermutationType;
|
||||||
typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
|
typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
|
||||||
typedef typename internal::plain_col_type<MatrixType>::type ColVectorType;
|
typedef typename internal::plain_col_type<MatrixType>::type ColVectorType;
|
||||||
|
@ -93,10 +93,10 @@ public:
|
|||||||
enum {
|
enum {
|
||||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
||||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
||||||
DiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime, ColsAtCompileTime),
|
DiagSizeAtCompileTime = internal::min_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime),
|
||||||
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
||||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
||||||
MaxDiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(MaxRowsAtCompileTime, MaxColsAtCompileTime),
|
MaxDiagSizeAtCompileTime = internal::min_size_prefer_fixed(MaxRowsAtCompileTime, MaxColsAtCompileTime),
|
||||||
MatrixOptions = MatrixType::Options
|
MatrixOptions = MatrixType::Options
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -499,10 +499,10 @@ template<typename MatrixType_, int QRPreconditioner> class JacobiSVD
|
|||||||
enum {
|
enum {
|
||||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
||||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
||||||
DiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime),
|
DiagSizeAtCompileTime = internal::min_size_prefer_dynamic(RowsAtCompileTime,ColsAtCompileTime),
|
||||||
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
||||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
||||||
MaxDiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(MaxRowsAtCompileTime,MaxColsAtCompileTime),
|
MaxDiagSizeAtCompileTime = internal::min_size_prefer_fixed(MaxRowsAtCompileTime,MaxColsAtCompileTime),
|
||||||
MatrixOptions = MatrixType::Options
|
MatrixOptions = MatrixType::Options
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -638,7 +638,7 @@ void JacobiSVD<MatrixType, QRPreconditioner>::allocate(Eigen::Index rows, Eigen:
|
|||||||
m_computeThinV = (computationOptions & ComputeThinV) != 0;
|
m_computeThinV = (computationOptions & ComputeThinV) != 0;
|
||||||
eigen_assert(!(m_computeFullU && m_computeThinU) && "JacobiSVD: you can't ask for both full and thin U");
|
eigen_assert(!(m_computeFullU && m_computeThinU) && "JacobiSVD: you can't ask for both full and thin U");
|
||||||
eigen_assert(!(m_computeFullV && m_computeThinV) && "JacobiSVD: you can't ask for both full and thin V");
|
eigen_assert(!(m_computeFullV && m_computeThinV) && "JacobiSVD: you can't ask for both full and thin V");
|
||||||
eigen_assert(EIGEN_IMPLIES(m_computeThinU || m_computeThinV, MatrixType::ColsAtCompileTime==Dynamic) &&
|
eigen_assert(internal::check_implication(m_computeThinU || m_computeThinV, MatrixType::ColsAtCompileTime==Dynamic) &&
|
||||||
"JacobiSVD: thin U and V are only available when your matrix has a dynamic number of columns.");
|
"JacobiSVD: thin U and V are only available when your matrix has a dynamic number of columns.");
|
||||||
if (QRPreconditioner == FullPivHouseholderQRPreconditioner)
|
if (QRPreconditioner == FullPivHouseholderQRPreconditioner)
|
||||||
{
|
{
|
||||||
|
@ -77,10 +77,10 @@ public:
|
|||||||
enum {
|
enum {
|
||||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
||||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
||||||
DiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime),
|
DiagSizeAtCompileTime = internal::min_size_prefer_dynamic(RowsAtCompileTime,ColsAtCompileTime),
|
||||||
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
||||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
||||||
MaxDiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(MaxRowsAtCompileTime,MaxColsAtCompileTime),
|
MaxDiagSizeAtCompileTime = internal::min_size_prefer_fixed(MaxRowsAtCompileTime,MaxColsAtCompileTime),
|
||||||
MatrixOptions = MatrixType::Options
|
MatrixOptions = MatrixType::Options
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -355,7 +355,7 @@ bool SVDBase<MatrixType>::allocate(Index rows, Index cols, unsigned int computat
|
|||||||
m_computeThinV = (computationOptions & ComputeThinV) != 0;
|
m_computeThinV = (computationOptions & ComputeThinV) != 0;
|
||||||
eigen_assert(!(m_computeFullU && m_computeThinU) && "SVDBase: you can't ask for both full and thin U");
|
eigen_assert(!(m_computeFullU && m_computeThinU) && "SVDBase: you can't ask for both full and thin U");
|
||||||
eigen_assert(!(m_computeFullV && m_computeThinV) && "SVDBase: you can't ask for both full and thin V");
|
eigen_assert(!(m_computeFullV && m_computeThinV) && "SVDBase: you can't ask for both full and thin V");
|
||||||
eigen_assert(EIGEN_IMPLIES(m_computeThinU || m_computeThinV, MatrixType::ColsAtCompileTime==Dynamic) &&
|
eigen_assert(internal::check_implication(m_computeThinU || m_computeThinV, MatrixType::ColsAtCompileTime==Dynamic) &&
|
||||||
"SVDBase: thin U and V are only available when your matrix has a dynamic number of columns.");
|
"SVDBase: thin U and V are only available when your matrix has a dynamic number of columns.");
|
||||||
|
|
||||||
m_diagSize = (std::min)(m_rows, m_cols);
|
m_diagSize = (std::min)(m_rows, m_cols);
|
||||||
|
@ -139,8 +139,8 @@ template<typename Derived> class SparseMatrixBase
|
|||||||
/** type of the equivalent dense matrix */
|
/** type of the equivalent dense matrix */
|
||||||
typedef Matrix<Scalar,RowsAtCompileTime,ColsAtCompileTime> DenseMatrixType;
|
typedef Matrix<Scalar,RowsAtCompileTime,ColsAtCompileTime> DenseMatrixType;
|
||||||
/** type of the equivalent square matrix */
|
/** type of the equivalent square matrix */
|
||||||
typedef Matrix<Scalar,EIGEN_SIZE_MAX(RowsAtCompileTime,ColsAtCompileTime),
|
typedef Matrix<Scalar, internal::max_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime),
|
||||||
EIGEN_SIZE_MAX(RowsAtCompileTime,ColsAtCompileTime)> SquareMatrixType;
|
internal::max_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime)> SquareMatrixType;
|
||||||
|
|
||||||
inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
||||||
inline Derived& derived() { return *static_cast<Derived*>(this); }
|
inline Derived& derived() { return *static_cast<Derived*>(this); }
|
||||||
|
@ -65,10 +65,10 @@ template<typename Lhs, typename Rhs, bool Transpose> class SparseDenseOuterProdu
|
|||||||
|
|
||||||
template<typename Lhs, typename Rhs> struct SparseSparseProductReturnType;
|
template<typename Lhs, typename Rhs> struct SparseSparseProductReturnType;
|
||||||
template<typename Lhs, typename Rhs,
|
template<typename Lhs, typename Rhs,
|
||||||
int InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(internal::traits<Lhs>::ColsAtCompileTime,internal::traits<Rhs>::RowsAtCompileTime)> struct DenseSparseProductReturnType;
|
int InnerSize = internal::min_size_prefer_fixed(internal::traits<Lhs>::ColsAtCompileTime, internal::traits<Rhs>::RowsAtCompileTime)> struct DenseSparseProductReturnType;
|
||||||
|
|
||||||
template<typename Lhs, typename Rhs,
|
template<typename Lhs, typename Rhs,
|
||||||
int InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(internal::traits<Lhs>::ColsAtCompileTime,internal::traits<Rhs>::RowsAtCompileTime)> struct SparseDenseProductReturnType;
|
int InnerSize = internal::min_size_prefer_fixed(internal::traits<Lhs>::ColsAtCompileTime, internal::traits<Rhs>::RowsAtCompileTime)> struct SparseDenseProductReturnType;
|
||||||
template<typename MatrixType,int UpLo> class SparseSymmetricPermutationProduct;
|
template<typename MatrixType,int UpLo> class SparseSymmetricPermutationProduct;
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
@ -35,7 +35,7 @@ struct packed_triangular_matrix_vector_product<Index,Mode,LhsScalar,ConjLhs,RhsS
|
|||||||
{
|
{
|
||||||
Index s = IsLower&&(HasUnitDiag||HasZeroDiag) ? 1 : 0;
|
Index s = IsLower&&(HasUnitDiag||HasZeroDiag) ? 1 : 0;
|
||||||
Index r = IsLower ? size-i: i+1;
|
Index r = IsLower ? size-i: i+1;
|
||||||
if (EIGEN_IMPLIES(HasUnitDiag||HasZeroDiag, (--r)>0))
|
if (internal::check_implication(HasUnitDiag||HasZeroDiag, (--r)>0))
|
||||||
ResMap(res+(IsLower ? s+i : 0),r) += alpha * cj(rhs[i]) * ConjLhsType(LhsMap(lhs+s,r));
|
ResMap(res+(IsLower ? s+i : 0),r) += alpha * cj(rhs[i]) * ConjLhsType(LhsMap(lhs+s,r));
|
||||||
if (HasUnitDiag)
|
if (HasUnitDiag)
|
||||||
res[i] += alpha * cj(rhs[i]);
|
res[i] += alpha * cj(rhs[i]);
|
||||||
@ -65,7 +65,7 @@ struct packed_triangular_matrix_vector_product<Index,Mode,LhsScalar,ConjLhs,RhsS
|
|||||||
{
|
{
|
||||||
Index s = !IsLower&&(HasUnitDiag||HasZeroDiag) ? 1 : 0;
|
Index s = !IsLower&&(HasUnitDiag||HasZeroDiag) ? 1 : 0;
|
||||||
Index r = IsLower ? i+1 : size-i;
|
Index r = IsLower ? i+1 : size-i;
|
||||||
if (EIGEN_IMPLIES(HasUnitDiag||HasZeroDiag, (--r)>0))
|
if (internal::check_implication(HasUnitDiag||HasZeroDiag, (--r)>0))
|
||||||
res[i] += alpha * (ConjLhsType(LhsMap(lhs+s,r)).cwiseProduct(ConjRhsType(RhsMap(rhs+(IsLower ? 0 : s+i),r)))).sum();
|
res[i] += alpha * (ConjLhsType(LhsMap(lhs+s,r)).cwiseProduct(ConjRhsType(RhsMap(rhs+(IsLower ? 0 : s+i),r)))).sum();
|
||||||
if (HasUnitDiag)
|
if (HasUnitDiag)
|
||||||
res[i] += alpha * cj(rhs[i]);
|
res[i] += alpha * cj(rhs[i]);
|
||||||
|
@ -30,7 +30,7 @@ template<typename MatrixType> void householder(const MatrixType& m)
|
|||||||
|
|
||||||
typedef Matrix<Scalar, MatrixType::ColsAtCompileTime, MatrixType::RowsAtCompileTime> TMatrixType;
|
typedef Matrix<Scalar, MatrixType::ColsAtCompileTime, MatrixType::RowsAtCompileTime> TMatrixType;
|
||||||
|
|
||||||
Matrix<Scalar, EIGEN_SIZE_MAX(MatrixType::RowsAtCompileTime,MatrixType::ColsAtCompileTime), 1> _tmp((std::max)(rows,cols));
|
Matrix<Scalar, internal::max_size_prefer_dynamic(MatrixType::RowsAtCompileTime,MatrixType::ColsAtCompileTime), 1> _tmp((std::max)(rows,cols));
|
||||||
Scalar* tmp = &_tmp.coeffRef(0,0);
|
Scalar* tmp = &_tmp.coeffRef(0,0);
|
||||||
|
|
||||||
Scalar beta;
|
Scalar beta;
|
||||||
|
@ -82,7 +82,7 @@ void check_random_matrix(const MatrixType &m)
|
|||||||
enum {
|
enum {
|
||||||
Rows = MatrixType::RowsAtCompileTime,
|
Rows = MatrixType::RowsAtCompileTime,
|
||||||
Cols = MatrixType::ColsAtCompileTime,
|
Cols = MatrixType::ColsAtCompileTime,
|
||||||
DiagSize = EIGEN_SIZE_MIN_PREFER_DYNAMIC(Rows, Cols)
|
DiagSize = internal::min_size_prefer_dynamic(Rows, Cols)
|
||||||
};
|
};
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
typedef typename MatrixType::Scalar Scalar;
|
||||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||||
|
@ -245,11 +245,11 @@ struct vectorization_logic
|
|||||||
>(InnerVectorizedTraversal,CompleteUnrolling)));
|
>(InnerVectorizedTraversal,CompleteUnrolling)));
|
||||||
|
|
||||||
VERIFY((test_assign<
|
VERIFY((test_assign<
|
||||||
Map<Matrix<Scalar,EIGEN_PLAIN_ENUM_MAX(2,PacketSize),EIGEN_PLAIN_ENUM_MAX(2,PacketSize)>, AlignedMax, InnerStride<3*PacketSize> >,
|
Map<Matrix<Scalar, internal::plain_enum_max(2,PacketSize), internal::plain_enum_max(2, PacketSize)>, AlignedMax, InnerStride<3*PacketSize> >,
|
||||||
Matrix<Scalar,EIGEN_PLAIN_ENUM_MAX(2,PacketSize),EIGEN_PLAIN_ENUM_MAX(2,PacketSize)>
|
Matrix<Scalar, internal::plain_enum_max(2, PacketSize), internal::plain_enum_max(2, PacketSize)>
|
||||||
>(DefaultTraversal,PacketSize>=8?InnerUnrolling:CompleteUnrolling)));
|
>(DefaultTraversal,PacketSize>=8?InnerUnrolling:CompleteUnrolling)));
|
||||||
|
|
||||||
VERIFY((test_assign(Matrix11(), Matrix<Scalar,PacketSize,EIGEN_PLAIN_ENUM_MIN(2,PacketSize)>()*Matrix<Scalar,EIGEN_PLAIN_ENUM_MIN(2,PacketSize),PacketSize>(),
|
VERIFY((test_assign(Matrix11(), Matrix<Scalar,PacketSize, internal::plain_enum_min(2, PacketSize)>()*Matrix<Scalar, internal::plain_enum_min(2, PacketSize),PacketSize>(),
|
||||||
InnerVectorizedTraversal, CompleteUnrolling)));
|
InnerVectorizedTraversal, CompleteUnrolling)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -407,8 +407,8 @@ struct vectorization_logic_half
|
|||||||
}
|
}
|
||||||
|
|
||||||
VERIFY((test_assign<
|
VERIFY((test_assign<
|
||||||
Map<Matrix<Scalar,EIGEN_PLAIN_ENUM_MAX(2,PacketSize),EIGEN_PLAIN_ENUM_MAX(2,PacketSize)>, AlignedMax, InnerStride<3*PacketSize> >,
|
Map<Matrix<Scalar, plain_enum_max(2,PacketSize), plain_enum_max(2,PacketSize)>, AlignedMax, InnerStride<3*PacketSize> >,
|
||||||
Matrix<Scalar,EIGEN_PLAIN_ENUM_MAX(2,PacketSize),EIGEN_PLAIN_ENUM_MAX(2,PacketSize)>
|
Matrix<Scalar, plain_enum_max(2,PacketSize), plain_enum_max(2,PacketSize)>
|
||||||
>(DefaultTraversal,PacketSize>4?InnerUnrolling:CompleteUnrolling)));
|
>(DefaultTraversal,PacketSize>4?InnerUnrolling:CompleteUnrolling)));
|
||||||
|
|
||||||
VERIFY((test_assign(Matrix57(), Matrix<Scalar,5*PacketSize,3>()*Matrix<Scalar,3,7>(),
|
VERIFY((test_assign(Matrix57(), Matrix<Scalar,5*PacketSize,3>()*Matrix<Scalar,3,7>(),
|
||||||
|
@ -29,7 +29,7 @@ namespace Eigen {
|
|||||||
*/
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class MaxSizeVector {
|
class MaxSizeVector {
|
||||||
static const size_t alignment = EIGEN_PLAIN_ENUM_MAX(EIGEN_ALIGNOF(T), sizeof(void*));
|
static const size_t alignment = internal::plain_enum_max(EIGEN_ALIGNOF(T), sizeof(void*));
|
||||||
public:
|
public:
|
||||||
// Construct a new MaxSizeVector, reserve n elements.
|
// Construct a new MaxSizeVector, reserve n elements.
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||||
|
@ -246,7 +246,7 @@ namespace Eigen {
|
|||||||
&& (!NumTraits<Scalar>::IsComplex)
|
&& (!NumTraits<Scalar>::IsComplex)
|
||||||
};
|
};
|
||||||
typedef typename internal::conditional<TransposeInput,Transpose<const ActualMatrixType>, ActualMatrixType const&>::type RowMajorWrapper;
|
typedef typename internal::conditional<TransposeInput,Transpose<const ActualMatrixType>, ActualMatrixType const&>::type RowMajorWrapper;
|
||||||
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(MatrixWrapper::MatrixFree,UpLo==(Lower|Upper)),MATRIX_FREE_CONJUGATE_GRADIENT_IS_COMPATIBLE_WITH_UPPER_UNION_LOWER_MODE_ONLY);
|
EIGEN_STATIC_ASSERT(internal::check_implication(MatrixWrapper::MatrixFree, UpLo==(Lower|Upper)),MATRIX_FREE_CONJUGATE_GRADIENT_IS_COMPATIBLE_WITH_UPPER_UNION_LOWER_MODE_ONLY);
|
||||||
typedef typename internal::conditional<UpLo==(Lower|Upper),
|
typedef typename internal::conditional<UpLo==(Lower|Upper),
|
||||||
RowMajorWrapper,
|
RowMajorWrapper,
|
||||||
typename MatrixWrapper::template ConstSelfAdjointViewReturnType<UpLo>::Type
|
typename MatrixWrapper::template ConstSelfAdjointViewReturnType<UpLo>::Type
|
||||||
|
@ -87,8 +87,8 @@ public:
|
|||||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||||
|
|
||||||
/** type of the equivalent square matrix */
|
/** type of the equivalent square matrix */
|
||||||
typedef Matrix<Scalar, EIGEN_SIZE_MAX(RowsAtCompileTime, ColsAtCompileTime),
|
typedef Matrix<Scalar, internal::max_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime),
|
||||||
EIGEN_SIZE_MAX(RowsAtCompileTime, ColsAtCompileTime) > SquareMatrixType;
|
internal::max_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime) > SquareMatrixType;
|
||||||
|
|
||||||
inline const Derived& derived() const {
|
inline const Derived& derived() const {
|
||||||
return *static_cast<const Derived*> (this);
|
return *static_cast<const Derived*> (this);
|
||||||
|
@ -37,7 +37,7 @@ struct internal::traits<SkylineProduct<LhsNested, RhsNested, ProductMode> > {
|
|||||||
|
|
||||||
RowsAtCompileTime = _LhsNested::RowsAtCompileTime,
|
RowsAtCompileTime = _LhsNested::RowsAtCompileTime,
|
||||||
ColsAtCompileTime = _RhsNested::ColsAtCompileTime,
|
ColsAtCompileTime = _RhsNested::ColsAtCompileTime,
|
||||||
InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(_LhsNested::ColsAtCompileTime, _RhsNested::RowsAtCompileTime),
|
InnerSize = internal::min_size_prefer_fixed(_LhsNested::ColsAtCompileTime, _RhsNested::RowsAtCompileTime),
|
||||||
|
|
||||||
MaxRowsAtCompileTime = _LhsNested::MaxRowsAtCompileTime,
|
MaxRowsAtCompileTime = _LhsNested::MaxRowsAtCompileTime,
|
||||||
MaxColsAtCompileTime = _RhsNested::MaxColsAtCompileTime,
|
MaxColsAtCompileTime = _RhsNested::MaxColsAtCompileTime,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user