mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-14 04:35:57 +08:00
much better workaround for empty struct (the previous one caused GCC 4.3 to generate wrong code leading to segfaults)
This commit is contained in:
parent
945cbc3bc6
commit
9d54783036
@ -56,7 +56,8 @@ struct ei_functor_traits<ei_scalar_add_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::sqrt()
|
* \sa class CwiseUnaryOp, Cwise::sqrt()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_sqrt_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_sqrt_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_sqrt_op)
|
||||||
inline const Scalar operator() (const Scalar& a) const { return ei_sqrt(a); }
|
inline const Scalar operator() (const Scalar& a) const { return ei_sqrt(a); }
|
||||||
typedef typename ei_packet_traits<Scalar>::type Packet;
|
typedef typename ei_packet_traits<Scalar>::type Packet;
|
||||||
inline Packet packetOp(const Packet& a) const { return ei_psqrt(a); }
|
inline Packet packetOp(const Packet& a) const { return ei_psqrt(a); }
|
||||||
@ -77,7 +78,8 @@ struct ei_functor_traits<ei_scalar_sqrt_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::cos()
|
* \sa class CwiseUnaryOp, Cwise::cos()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_cos_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_cos_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_cos_op)
|
||||||
inline Scalar operator() (const Scalar& a) const { return ei_cos(a); }
|
inline Scalar operator() (const Scalar& a) const { return ei_cos(a); }
|
||||||
typedef typename ei_packet_traits<Scalar>::type Packet;
|
typedef typename ei_packet_traits<Scalar>::type Packet;
|
||||||
inline Packet packetOp(const Packet& a) const { return ei_pcos(a); }
|
inline Packet packetOp(const Packet& a) const { return ei_pcos(a); }
|
||||||
@ -99,7 +101,8 @@ struct ei_functor_traits<ei_scalar_cos_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::sin()
|
* \sa class CwiseUnaryOp, Cwise::sin()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_sin_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_sin_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_sin_op)
|
||||||
inline const Scalar operator() (const Scalar& a) const { return ei_sin(a); }
|
inline const Scalar operator() (const Scalar& a) const { return ei_sin(a); }
|
||||||
typedef typename ei_packet_traits<Scalar>::type Packet;
|
typedef typename ei_packet_traits<Scalar>::type Packet;
|
||||||
inline Packet packetOp(const Packet& a) const { return ei_psin(a); }
|
inline Packet packetOp(const Packet& a) const { return ei_psin(a); }
|
||||||
@ -143,6 +146,7 @@ struct ei_functor_traits<ei_scalar_pow_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
struct ei_scalar_inverse_op {
|
struct ei_scalar_inverse_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_inverse_op)
|
||||||
inline Scalar operator() (const Scalar& a) const { return Scalar(1)/a; }
|
inline Scalar operator() (const Scalar& a) const { return Scalar(1)/a; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
inline const PacketScalar packetOp(const PacketScalar& a) const
|
inline const PacketScalar packetOp(const PacketScalar& a) const
|
||||||
@ -162,6 +166,7 @@ struct ei_functor_traits<ei_scalar_inverse_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
struct ei_scalar_square_op {
|
struct ei_scalar_square_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_square_op)
|
||||||
inline Scalar operator() (const Scalar& a) const { return a*a; }
|
inline Scalar operator() (const Scalar& a) const { return a*a; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
inline const PacketScalar packetOp(const PacketScalar& a) const
|
inline const PacketScalar packetOp(const PacketScalar& a) const
|
||||||
@ -181,6 +186,7 @@ struct ei_functor_traits<ei_scalar_square_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
struct ei_scalar_cube_op {
|
struct ei_scalar_cube_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_cube_op)
|
||||||
inline Scalar operator() (const Scalar& a) const { return a*a*a; }
|
inline Scalar operator() (const Scalar& a) const { return a*a*a; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
inline const PacketScalar packetOp(const PacketScalar& a) const
|
inline const PacketScalar packetOp(const PacketScalar& a) const
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
#ifndef EIGEN_RANDOM_H
|
#ifndef EIGEN_RANDOM_H
|
||||||
#define EIGEN_RANDOM_H
|
#define EIGEN_RANDOM_H
|
||||||
|
|
||||||
template<typename Scalar> struct ei_scalar_random_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_random_op {
|
||||||
inline ei_scalar_random_op(void) {}
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_random_op)
|
||||||
inline const Scalar operator() (int, int) const { return ei_random<Scalar>(); }
|
inline const Scalar operator() (int, int) const { return ei_random<Scalar>(); }
|
||||||
};
|
};
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
|
@ -110,7 +110,8 @@ class PartialReduxExpr : ei_no_assignment_operator,
|
|||||||
|
|
||||||
#define EIGEN_MEMBER_FUNCTOR(MEMBER,COST) \
|
#define EIGEN_MEMBER_FUNCTOR(MEMBER,COST) \
|
||||||
template <typename ResultType> \
|
template <typename ResultType> \
|
||||||
struct ei_member_##MEMBER EIGEN_EMPTY_STRUCT { \
|
struct ei_member_##MEMBER { \
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_member_##MEMBER) \
|
||||||
typedef ResultType result_type; \
|
typedef ResultType result_type; \
|
||||||
template<typename Scalar, int Size> struct Cost \
|
template<typename Scalar, int Size> struct Cost \
|
||||||
{ enum { value = COST }; }; \
|
{ enum { value = COST }; }; \
|
||||||
|
@ -32,7 +32,8 @@
|
|||||||
*
|
*
|
||||||
* \sa class CwiseBinaryOp, MatrixBase::operator+, class VectorwiseOp, MatrixBase::sum()
|
* \sa class CwiseBinaryOp, MatrixBase::operator+, class VectorwiseOp, MatrixBase::sum()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_sum_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_sum_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_sum_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a + b; }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a + b; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
||||||
@ -54,7 +55,8 @@ struct ei_functor_traits<ei_scalar_sum_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa class CwiseBinaryOp, Cwise::operator*(), class VectorwiseOp, MatrixBase::redux()
|
* \sa class CwiseBinaryOp, Cwise::operator*(), class VectorwiseOp, MatrixBase::redux()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_product_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_product_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_product_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a * b; }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a * b; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
||||||
@ -76,7 +78,8 @@ struct ei_functor_traits<ei_scalar_product_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff()
|
* \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_min_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_min_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_min_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return std::min(a, b); }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return std::min(a, b); }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
||||||
@ -98,7 +101,8 @@ struct ei_functor_traits<ei_scalar_min_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff()
|
* \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_max_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_max_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_max_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return std::max(a, b); }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return std::max(a, b); }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
||||||
@ -120,7 +124,8 @@ struct ei_functor_traits<ei_scalar_max_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa MatrixBase::stableNorm(), class Redux
|
* \sa MatrixBase::stableNorm(), class Redux
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_hypot_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_hypot_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_hypot_op)
|
||||||
// typedef typename NumTraits<Scalar>::Real result_type;
|
// typedef typename NumTraits<Scalar>::Real result_type;
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& _x, const Scalar& _y) const
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& _x, const Scalar& _y) const
|
||||||
{
|
{
|
||||||
@ -142,7 +147,8 @@ struct ei_functor_traits<ei_scalar_hypot_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa class CwiseBinaryOp, MatrixBase::operator-
|
* \sa class CwiseBinaryOp, MatrixBase::operator-
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_difference_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_difference_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_difference_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a - b; }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a - b; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
||||||
@ -161,7 +167,8 @@ struct ei_functor_traits<ei_scalar_difference_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa class CwiseBinaryOp, Cwise::operator/()
|
* \sa class CwiseBinaryOp, Cwise::operator/()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_quotient_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_quotient_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_quotient_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a / b; }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a / b; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a, const PacketScalar& b) const
|
||||||
@ -185,7 +192,8 @@ struct ei_functor_traits<ei_scalar_quotient_op<Scalar> > {
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, MatrixBase::operator-
|
* \sa class CwiseUnaryOp, MatrixBase::operator-
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_opposite_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_opposite_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_opposite_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return -a; }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return -a; }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const
|
||||||
@ -203,7 +211,8 @@ struct ei_functor_traits<ei_scalar_opposite_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::abs
|
* \sa class CwiseUnaryOp, Cwise::abs
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_abs_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_abs_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_abs_op)
|
||||||
typedef typename NumTraits<Scalar>::Real result_type;
|
typedef typename NumTraits<Scalar>::Real result_type;
|
||||||
EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return ei_abs(a); }
|
EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return ei_abs(a); }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
@ -224,7 +233,8 @@ struct ei_functor_traits<ei_scalar_abs_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::abs2
|
* \sa class CwiseUnaryOp, Cwise::abs2
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_abs2_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_abs2_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_abs2_op)
|
||||||
typedef typename NumTraits<Scalar>::Real result_type;
|
typedef typename NumTraits<Scalar>::Real result_type;
|
||||||
EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return ei_abs2(a); }
|
EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return ei_abs2(a); }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
@ -240,7 +250,8 @@ struct ei_functor_traits<ei_scalar_abs2_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, MatrixBase::conjugate()
|
* \sa class CwiseUnaryOp, MatrixBase::conjugate()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_conjugate_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_conjugate_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_conjugate_op)
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return ei_conj(a); }
|
EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return ei_conj(a); }
|
||||||
template<typename PacketScalar>
|
template<typename PacketScalar>
|
||||||
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const { return a; }
|
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const { return a; }
|
||||||
@ -260,7 +271,8 @@ struct ei_functor_traits<ei_scalar_conjugate_op<Scalar> >
|
|||||||
* \sa class CwiseUnaryOp, MatrixBase::cast()
|
* \sa class CwiseUnaryOp, MatrixBase::cast()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar, typename NewType>
|
template<typename Scalar, typename NewType>
|
||||||
struct ei_scalar_cast_op EIGEN_EMPTY_STRUCT {
|
struct ei_scalar_cast_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_cast_op)
|
||||||
typedef NewType result_type;
|
typedef NewType result_type;
|
||||||
EIGEN_STRONG_INLINE const NewType operator() (const Scalar& a) const { return static_cast<NewType>(a); }
|
EIGEN_STRONG_INLINE const NewType operator() (const Scalar& a) const { return static_cast<NewType>(a); }
|
||||||
};
|
};
|
||||||
@ -274,7 +286,8 @@ struct ei_functor_traits<ei_scalar_cast_op<Scalar,NewType> >
|
|||||||
* \sa class CwiseUnaryOp, MatrixBase::real()
|
* \sa class CwiseUnaryOp, MatrixBase::real()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
struct ei_scalar_real_op EIGEN_EMPTY_STRUCT {
|
struct ei_scalar_real_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_real_op)
|
||||||
typedef typename NumTraits<Scalar>::Real result_type;
|
typedef typename NumTraits<Scalar>::Real result_type;
|
||||||
EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return ei_real(a); }
|
EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return ei_real(a); }
|
||||||
EIGEN_STRONG_INLINE result_type& operator() (Scalar& a) const { return ei_real_ref(a); }
|
EIGEN_STRONG_INLINE result_type& operator() (Scalar& a) const { return ei_real_ref(a); }
|
||||||
@ -289,7 +302,8 @@ struct ei_functor_traits<ei_scalar_real_op<Scalar> >
|
|||||||
* \sa class CwiseUnaryOp, MatrixBase::imag()
|
* \sa class CwiseUnaryOp, MatrixBase::imag()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
struct ei_scalar_imag_op EIGEN_EMPTY_STRUCT {
|
struct ei_scalar_imag_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_imag_op)
|
||||||
typedef typename NumTraits<Scalar>::Real result_type;
|
typedef typename NumTraits<Scalar>::Real result_type;
|
||||||
EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return ei_imag(a); }
|
EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return ei_imag(a); }
|
||||||
EIGEN_STRONG_INLINE result_type& operator() (Scalar& a) const { return ei_imag_ref(a); }
|
EIGEN_STRONG_INLINE result_type& operator() (Scalar& a) const { return ei_imag_ref(a); }
|
||||||
@ -304,7 +318,8 @@ struct ei_functor_traits<ei_scalar_imag_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::exp()
|
* \sa class CwiseUnaryOp, Cwise::exp()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_exp_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_exp_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_exp_op)
|
||||||
inline const Scalar operator() (const Scalar& a) const { return ei_exp(a); }
|
inline const Scalar operator() (const Scalar& a) const { return ei_exp(a); }
|
||||||
typedef typename ei_packet_traits<Scalar>::type Packet;
|
typedef typename ei_packet_traits<Scalar>::type Packet;
|
||||||
inline Packet packetOp(const Packet& a) const { return ei_pexp(a); }
|
inline Packet packetOp(const Packet& a) const { return ei_pexp(a); }
|
||||||
@ -319,7 +334,8 @@ struct ei_functor_traits<ei_scalar_exp_op<Scalar> >
|
|||||||
*
|
*
|
||||||
* \sa class CwiseUnaryOp, Cwise::log()
|
* \sa class CwiseUnaryOp, Cwise::log()
|
||||||
*/
|
*/
|
||||||
template<typename Scalar> struct ei_scalar_log_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_log_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_log_op)
|
||||||
inline const Scalar operator() (const Scalar& a) const { return ei_log(a); }
|
inline const Scalar operator() (const Scalar& a) const { return ei_log(a); }
|
||||||
typedef typename ei_packet_traits<Scalar>::type Packet;
|
typedef typename ei_packet_traits<Scalar>::type Packet;
|
||||||
inline Packet packetOp(const Packet& a) const { return ei_plog(a); }
|
inline Packet packetOp(const Packet& a) const { return ei_plog(a); }
|
||||||
@ -428,7 +444,8 @@ template<typename Scalar>
|
|||||||
struct ei_functor_traits<ei_scalar_constant_op<Scalar> >
|
struct ei_functor_traits<ei_scalar_constant_op<Scalar> >
|
||||||
{ enum { Cost = 1, PacketAccess = ei_packet_traits<Scalar>::size>1, IsRepeatable = true }; };
|
{ enum { Cost = 1, PacketAccess = ei_packet_traits<Scalar>::size>1, IsRepeatable = true }; };
|
||||||
|
|
||||||
template<typename Scalar> struct ei_scalar_identity_op EIGEN_EMPTY_STRUCT {
|
template<typename Scalar> struct ei_scalar_identity_op {
|
||||||
|
EIGEN_EMPTY_STRUCT_CTOR(ei_scalar_identity_op)
|
||||||
EIGEN_STRONG_INLINE ei_scalar_identity_op(void) {}
|
EIGEN_STRONG_INLINE ei_scalar_identity_op(void) {}
|
||||||
EIGEN_STRONG_INLINE const Scalar operator() (int row, int col) const { return row==col ? Scalar(1) : Scalar(0); }
|
EIGEN_STRONG_INLINE const Scalar operator() (int row, int col) const { return row==col ? Scalar(1) : Scalar(0); }
|
||||||
};
|
};
|
||||||
|
@ -28,16 +28,11 @@
|
|||||||
|
|
||||||
// just a workaround because GCC seems to not really like empty structs
|
// just a workaround because GCC seems to not really like empty structs
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
struct ei_empty_struct
|
#define EIGEN_EMPTY_STRUCT_CTOR(X) \
|
||||||
{
|
EIGEN_STRONG_INLINE X() {} \
|
||||||
EIGEN_ALWAYS_INLINE_ATTRIB ei_empty_struct() {}
|
EIGEN_STRONG_INLINE X(const X&) {}
|
||||||
EIGEN_ALWAYS_INLINE_ATTRIB ei_empty_struct(const ei_empty_struct&) {}
|
|
||||||
EIGEN_ALWAYS_INLINE_ATTRIB ei_empty_struct& operator=(const ei_empty_struct&) { return *this; }
|
|
||||||
char _ei_dummy_;
|
|
||||||
};
|
|
||||||
#define EIGEN_EMPTY_STRUCT : Eigen::ei_empty_struct
|
|
||||||
#else
|
#else
|
||||||
#define EIGEN_EMPTY_STRUCT
|
#define EIGEN_EMPTY_STRUCT_CTOR(X)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//classes inheriting ei_no_assignment_operator don't generate a default operator=.
|
//classes inheriting ei_no_assignment_operator don't generate a default operator=.
|
||||||
@ -51,10 +46,10 @@ class ei_no_assignment_operator
|
|||||||
* can be accessed using value() and setValue().
|
* can be accessed using value() and setValue().
|
||||||
* Otherwise, this class is an empty structure and value() just returns the template parameter Value.
|
* Otherwise, this class is an empty structure and value() just returns the template parameter Value.
|
||||||
*/
|
*/
|
||||||
template<int Value> class ei_int_if_dynamic EIGEN_EMPTY_STRUCT
|
template<int Value> class ei_int_if_dynamic
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ei_int_if_dynamic() {}
|
EIGEN_EMPTY_STRUCT_CTOR(ei_int_if_dynamic)
|
||||||
explicit ei_int_if_dynamic(int) {}
|
explicit ei_int_if_dynamic(int) {}
|
||||||
static int value() { return Value; }
|
static int value() { return Value; }
|
||||||
void setValue(int) {}
|
void setValue(int) {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user