// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2008 Benoit Jacob // // Eigen is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 3 of the License, or (at your option) any later version. // // Alternatively, you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the // GNU General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License and a copy of the GNU General Public License along with // Eigen. If not, see . #ifndef EIGEN_UTIL_H #define EIGEN_UTIL_H #ifdef EIGEN_DONT_USE_UNROLLED_LOOPS #define EIGEN_UNROLLED_LOOPS (false) #else #define EIGEN_UNROLLED_LOOPS (true) #endif #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER RowMajor #else #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER ColumnMajor #endif #undef minor #define USING_PART_OF_NAMESPACE_EIGEN \ EIGEN_USING_MATRIX_TYPEDEFS \ using Eigen::Matrix; \ using Eigen::MatrixBase; #ifdef EIGEN_INTERNAL_DEBUGGING #define eigen_internal_assert(x) assert(x); #else #define eigen_internal_assert(x) #endif #ifdef NDEBUG #define EIGEN_ONLY_USED_FOR_DEBUG(x) (void)x #else #define EIGEN_ONLY_USED_FOR_DEBUG(x) #endif #ifdef __GNUC__ #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) #else #define EIGEN_ALWAYS_INLINE #endif #define EIGEN_INHERIT_ASSIGNMENT_OPERATOR(Derived, Op) \ template \ Derived& operator Op(const MatrixBase& other) \ { \ return Base::operator Op(other); \ } \ Derived& operator Op(const Derived& other) \ { \ return Base::operator Op(other); \ } #define EIGEN_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, Op) \ template \ Derived& operator Op(const Other& scalar) \ { \ return Base::operator Op(scalar); \ } #define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) \ EIGEN_INHERIT_ASSIGNMENT_OPERATOR(Derived, =) \ EIGEN_INHERIT_ASSIGNMENT_OPERATOR(Derived, +=) \ EIGEN_INHERIT_ASSIGNMENT_OPERATOR(Derived, -=) \ EIGEN_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, *=) \ EIGEN_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, /=) #define EIGEN_ENUM_MIN(a,b) (((int)a <= (int)b) ? (int)a : (int)b) const int Dynamic = -10; const int ColumnMajor = 0; const int RowMajor = 1; enum CornerType { TopLeft, TopRight, BottomLeft, BottomRight }; //classes inheriting NoOperatorEquals don't generate a default operator=. class NoOperatorEquals { private: NoOperatorEquals& operator=(const NoOperatorEquals&); }; template class IntAtRunTimeIfDynamic { public: IntAtRunTimeIfDynamic() {} explicit IntAtRunTimeIfDynamic(int) {} static int value() { return Value; } void setValue(int) {} }; template<> class IntAtRunTimeIfDynamic { int m_value; IntAtRunTimeIfDynamic() {} public: explicit IntAtRunTimeIfDynamic(int value) : m_value(value) {} int value() const { return m_value; } void setValue(int value) { m_value = value; } }; #endif // EIGEN_UTIL_H