[eigen] patch (enums)

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Hi List,

please find attached the patch for removing the "static const int" everywhere. 
Instead, using enums in classes and #defines for the global constants (just 
to test performance).

Here, it does not at all change performance, both with g++-4.2 and g++-4.1!

Therefore I am not so sure anymore if I want to move to enums. Please share 
your opinion!

It seems to me that g++ had no problem at all optimizing the "static const 
int" as mere literals!

Even if we move to enums I think I will revert the global constants to 
be "const int" instead of defines, as that is really cleaner.

Cheers,

Benoit
diff --git a/Eigen/src/Core/Block.h b/Eigen/src/Core/Block.h
index 92d8a1d..45a1eb7 100644
--- a/Eigen/src/Core/Block.h
+++ b/Eigen/src/Core/Block.h
@@ -67,8 +67,10 @@ template<typename MatrixType, int BlockRows, int BlockCols> class Block
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block)
     
   private:
-    static const int RowsAtCompileTime = BlockRows,
-                     ColsAtCompileTime = BlockCols;
+    enum{
+      RowsAtCompileTime = BlockRows,
+      ColsAtCompileTime = BlockCols
+    };
 
     const Block& _ref() const { return *this; }
     int _rows() const { return BlockRows; }
diff --git a/Eigen/src/Core/Cast.h b/Eigen/src/Core/Cast.h
index 73fdbc2..6963003 100644
--- a/Eigen/src/Core/Cast.h
+++ b/Eigen/src/Core/Cast.h
@@ -57,8 +57,10 @@ template<typename NewScalar, typename MatrixType> class Cast : NoOperatorEquals,
     Cast(const MatRef& matrix) : m_matrix(matrix) {}
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
     const Cast& _ref() const { return *this; }
     int _rows() const { return m_matrix.rows(); }
     int _cols() const { return m_matrix.cols(); }
diff --git a/Eigen/src/Core/Column.h b/Eigen/src/Core/Column.h
index 53af215..5265bcb 100644
--- a/Eigen/src/Core/Column.h
+++ b/Eigen/src/Core/Column.h
@@ -63,8 +63,11 @@ template<typename MatrixType> class Column
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Column)
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = 1;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = 1
+    };
+    
     const Column& _ref() const { return *this; }
     int _rows() const { return m_matrix.rows(); }
     int _cols() const { return 1; }
diff --git a/Eigen/src/Core/Conjugate.h b/Eigen/src/Core/Conjugate.h
index 48423e0..e99ca54 100644
--- a/Eigen/src/Core/Conjugate.h
+++ b/Eigen/src/Core/Conjugate.h
@@ -49,8 +49,10 @@ template<typename MatrixType> class Conjugate : NoOperatorEquals,
     Conjugate(const MatRef& matrix) : m_matrix(matrix) {}
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
 
     const Conjugate& _ref() const { return *this; }
     int _rows() const { return m_matrix.rows(); }
diff --git a/Eigen/src/Core/DiagonalCoeffs.h b/Eigen/src/Core/DiagonalCoeffs.h
index b3bc8c7..bd8ac2c 100644
--- a/Eigen/src/Core/DiagonalCoeffs.h
+++ b/Eigen/src/Core/DiagonalCoeffs.h
@@ -51,8 +51,10 @@ template<typename MatrixType> class DiagonalCoeffs
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(DiagonalCoeffs)
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = 1;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = 1
+    };
 
     const DiagonalCoeffs& _ref() const { return *this; }
     int _rows() const { return std::min(m_matrix.rows(), m_matrix.cols()); }
diff --git a/Eigen/src/Core/DiagonalMatrix.h b/Eigen/src/Core/DiagonalMatrix.h
index 9ce9871..b36bce1 100644
--- a/Eigen/src/Core/DiagonalMatrix.h
+++ b/Eigen/src/Core/DiagonalMatrix.h
@@ -52,16 +52,18 @@ class DiagonalMatrix : NoOperatorEquals,
     DiagonalMatrix(const CoeffsVecRef& coeffs) : m_coeffs(coeffs)
     {
       assert(CoeffsVectorType::Traits::IsVectorAtCompileTime
-          && coeffs.size() > 0);
+          && coeffs.coeffs() > 0);
     }
     
   private:
-    static const int RowsAtCompileTime = CoeffsVectorType::Traits::SizeAtCompileTime,
-                     ColsAtCompileTime = CoeffsVectorType::Traits::SizeAtCompileTime;
+    enum {
+      RowsAtCompileTime = CoeffsVectorType::Traits::SizeAtCompileTime,
+      ColsAtCompileTime = CoeffsVectorType::Traits::SizeAtCompileTime
+    };
     
     const DiagonalMatrix& _ref() const { return *this; }
-    int _rows() const { return m_coeffs.size(); }
-    int _cols() const { return m_coeffs.size(); }
+    int _rows() const { return m_coeffs.coeffs(); }
+    int _cols() const { return m_coeffs.coeffs(); }
     
     Scalar _coeff(int row, int col) const
     {
diff --git a/Eigen/src/Core/Difference.h b/Eigen/src/Core/Difference.h
index 814ab93..ae4424a 100644
--- a/Eigen/src/Core/Difference.h
+++ b/Eigen/src/Core/Difference.h
@@ -55,8 +55,10 @@ template<typename Lhs, typename Rhs> class Difference : NoOperatorEquals,
     }
 
   private:
-    static const int RowsAtCompileTime = Lhs::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = Rhs::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = Lhs::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = Rhs::Traits::ColsAtCompileTime
+    };
 
     const Difference& _ref() const { return *this; }
     int _rows() const { return m_lhs.rows(); }
diff --git a/Eigen/src/Core/Dot.h b/Eigen/src/Core/Dot.h
index 3ff416f..6b3ba11 100644
--- a/Eigen/src/Core/Dot.h
+++ b/Eigen/src/Core/Dot.h
@@ -46,7 +46,7 @@ struct DotUnroller<0, Size, Derived1, Derived2>
 };
 
 template<int Index, typename Derived1, typename Derived2>
-struct DotUnroller<Index, Dynamic, Derived1, Derived2>
+struct DotUnroller<Index, EIGEN_DYNAMIC, Derived1, Derived2>
 {
   static void run(const Derived1&, const Derived2&, typename Derived1::Scalar&) {}
 };
@@ -74,10 +74,10 @@ Scalar MatrixBase<Scalar, Derived>::dot(const OtherDerived& other) const
 {
   assert(Traits::IsVectorAtCompileTime
       && OtherDerived::Traits::IsVectorAtCompileTime
-      && size() == other.size());
+      && coeffs() == other.coeffs());
   Scalar res;
   if(EIGEN_UNROLLED_LOOPS
-  && Traits::SizeAtCompileTime != Dynamic
+  && Traits::SizeAtCompileTime != EIGEN_DYNAMIC
   && Traits::SizeAtCompileTime <= 16)
     DotUnroller<Traits::SizeAtCompileTime-1, Traits::SizeAtCompileTime,
                 Derived, OtherDerived>
@@ -85,7 +85,7 @@ Scalar MatrixBase<Scalar, Derived>::dot(const OtherDerived& other) const
   else
   {
     res = (*this).coeff(0) * conj(other.coeff(0));
-    for(int i = 1; i < size(); i++)
+    for(int i = 1; i < coeffs(); i++)
       res += (*this).coeff(i)* conj(other.coeff(i));
   }
   return res;
diff --git a/Eigen/src/Core/DynBlock.h b/Eigen/src/Core/DynBlock.h
index da32bcd..ce545b3 100644
--- a/Eigen/src/Core/DynBlock.h
+++ b/Eigen/src/Core/DynBlock.h
@@ -67,9 +67,10 @@ template<typename MatrixType> class DynBlock
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(DynBlock)
     
   private:
-    static const int
-      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime == 1 ? 1 : Dynamic,
-      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime == 1 ? 1 : Dynamic;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime == 1 ? 1 : EIGEN_DYNAMIC,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime == 1 ? 1 : EIGEN_DYNAMIC
+    };
 
     const DynBlock& _ref() const { return *this; }
     int _rows() const { return m_blockRows; }
diff --git a/Eigen/src/Core/Identity.h b/Eigen/src/Core/Identity.h
index bf40acd..bf7b2de 100644
--- a/Eigen/src/Core/Identity.h
+++ b/Eigen/src/Core/Identity.h
@@ -45,8 +45,10 @@ template<typename MatrixType> class Identity : NoOperatorEquals,
     }
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
     
     const Identity& _ref() const { return *this; }
     int _rows() const { return m_rows; }
diff --git a/Eigen/src/Core/Map.h b/Eigen/src/Core/Map.h
index ca16d1a..e24623a 100644
--- a/Eigen/src/Core/Map.h
+++ b/Eigen/src/Core/Map.h
@@ -47,9 +47,11 @@ template<typename MatrixType> class Map
     friend class MatrixBase<Scalar, Map<MatrixType> >;
 
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
-    static const MatrixStorageOrder _Order = MatrixType::StorageOrder;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime,
+      Order = MatrixType::StorageOrder
+    };
 
     const Map& _ref() const { return *this; }
     int _rows() const { return m_rows; }
@@ -57,17 +59,17 @@ template<typename MatrixType> class Map
     
     const Scalar& _coeff(int row, int col) const
     {
-      if(_Order == ColumnMajor)
+      if(Order == EIGEN_COLUMN_MAJOR)
         return m_data[row + col * m_rows];
-      else // RowMajor
+      else // EIGEN_ROW_MAJOR
         return m_data[col + row * m_cols];
     }
     
     Scalar& _coeffRef(int row, int col)
     {
-      if(_Order == ColumnMajor)
+      if(Order == EIGEN_COLUMN_MAJOR)
         return const_cast<Scalar*>(m_data)[row + col * m_rows];
-      else // RowMajor
+      else // EIGEN_ROW_MAJOR
         return const_cast<Scalar*>(m_data)[col + row * m_cols];
     }
   
@@ -75,9 +77,9 @@ template<typename MatrixType> class Map
     Map(const Scalar* data, int rows, int cols) : m_data(data), m_rows(rows), m_cols(cols)
     {
       assert(rows > 0
-          && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows)
+          && (RowsAtCompileTime == EIGEN_DYNAMIC || RowsAtCompileTime == rows)
           && cols > 0
-          && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols));
+          && (ColsAtCompileTime == EIGEN_DYNAMIC || ColsAtCompileTime == cols));
     }
     
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map)
@@ -88,7 +90,7 @@ template<typename MatrixType> class Map
 };
 
 /** This is the const version of map(Scalar*,int,int). */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 const Map<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(const Scalar* data, int rows, int cols)
 {
@@ -96,7 +98,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(const Scalar* data, int rows,
 }
 
 /** This is the const version of map(Scalar*,int). */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 const Map<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(const Scalar* data, int size)
 {
@@ -108,7 +110,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(const Scalar* data, int size)
 }
 
 /** This is the const version of map(Scalar*). */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 const Map<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(const Scalar* data)
 {
@@ -126,7 +128,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(const Scalar* data)
   *
   * \sa map(const Scalar*, int, int), map(Scalar*, int), map(Scalar*), class Map
   */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 Map<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(Scalar* data, int rows, int cols)
 {
@@ -145,7 +147,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(Scalar* data, int rows, int co
   *
   * \sa map(const Scalar*, int), map(Scalar*, int, int), map(Scalar*), class Map
   */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 Map<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(Scalar* data, int size)
 {
@@ -165,7 +167,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(Scalar* data, int size)
   *
   * \sa map(const Scalar*), map(Scalar*, int), map(Scalar*, int, int), class Map
   */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 Map<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(Scalar* data)
 {
@@ -180,7 +182,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>::map(Scalar* data)
   *
   * \sa Matrix(const Scalar *), Matrix::map(const Scalar *, int, int)
   */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>
   ::Matrix(const Scalar *data, int rows, int cols)
   : Storage(rows, cols)
@@ -198,7 +200,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>
   *
   * \sa Matrix(const Scalar *), Matrix::map(const Scalar *, int)
   */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>
   ::Matrix(const Scalar *data, int size)
   : Storage(size)
@@ -216,7 +218,7 @@ Matrix<_Scalar, _Rows, _Cols, _StorageOrder>
   * \sa Matrix(const Scalar *, int), Matrix(const Scalar *, int, int),
   * Matrix::map(const Scalar *)
   */
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 Matrix<_Scalar, _Rows, _Cols, _StorageOrder>
   ::Matrix(const Scalar *data)
   : Storage()
diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h
index 0165d5a..f1e6b8e 100644
--- a/Eigen/src/Core/Matrix.h
+++ b/Eigen/src/Core/Matrix.h
@@ -31,11 +31,11 @@
   * \brief The matrix class, also used for vectors and row-vectors
   *
   * \param _Scalar the scalar type, i.e. the type of the coefficients
-  * \param _Rows the number of rows at compile-time. Use the special value \a Dynamic to specify that the number of rows is dynamic, i.e. is not fixed at compile-time.
-  * \param _Cols the number of columns at compile-time. Use the special value \a Dynamic to specify that the number of columns is dynamic, i.e. is not fixed at compile-time.
-  * \param _StorageOrder can be either \a RowMajor or \a ColumnMajor.
+  * \param _Rows the number of rows at compile-time. Use the special value \a EIGEN_DYNAMIC to specify that the number of rows is dynamic, i.e. is not fixed at compile-time.
+  * \param _Cols the number of columns at compile-time. Use the special value \a EIGEN_DYNAMIC to specify that the number of columns is dynamic, i.e. is not fixed at compile-time.
+  * \param _StorageOrder can be either \a EIGEN_ROW_MAJOR or \a EIGEN_COLUMN_MAJOR.
   * This template parameter has a default value (EIGEN_DEFAULT_MATRIX_STORAGE_ORDER)
-  * which, if not predefined, is defined to \a ColumnMajor. You can override this behavior by
+  * which, if not predefined, is defined to \a EIGEN_COLUMN_MAJOR. You can override this behavior by
   * predefining it before including Eigen headers.
   *
   * This single class template covers all kinds of matrix and vectors that Eigen can handle.
@@ -61,7 +61,7 @@
   *
   * Examples:
   * \li \c Matrix2d is a typedef for \c Matrix<double,2,2>
-  * \li \c VectorXf is a typedef for \c Matrix<float,Dynamic,1>
+  * \li \c VectorXf is a typedef for \c Matrix<float,EIGEN_DYNAMIC,1>
   * \li \c RowVector3i is a typedef for \c Matrix<int,1,3>
   *
   * Of course these typedefs do not exhaust all the possibilities offered by the Matrix class
@@ -70,10 +70,10 @@
   * \c Matrix<double,3,5>.
   *
   * Note that most of the API is in the base class MatrixBase, and that the base class
-  * MatrixStorage also provides the MatrixStorage::resize() public method.
+  * MatrixStorage also provides the MatrixStorage::recoeffs() public method.
   */
 template<typename _Scalar, int _Rows, int _Cols,
-         MatrixStorageOrder _StorageOrder = EIGEN_DEFAULT_MATRIX_STORAGE_ORDER>
+         int _StorageOrder = EIGEN_DEFAULT_MATRIX_STORAGE_ORDER>
 class Matrix : public MatrixBase<_Scalar, Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >,
                public MatrixStorage<_Scalar, _Rows, _Cols>
 {
@@ -96,24 +96,27 @@ class Matrix : public MatrixBase<_Scalar, Matrix<_Scalar, _Rows, _Cols, _Storage
     { return Storage::m_data; }
     
   private:
-    static const int RowsAtCompileTime = _Rows, ColsAtCompileTime = _Cols;
-    static const MatrixStorageOrder StorageOrder = _StorageOrder;
+    enum {
+      RowsAtCompileTime = _Rows,
+      ColsAtCompileTime = _Cols,
+      StorageOrder = _StorageOrder
+    };
 
     Ref _ref() const { return Ref(*this); }
     
     const Scalar& _coeff(int row, int col) const
     {
-      if(_StorageOrder == ColumnMajor)
+      if(_StorageOrder == EIGEN_COLUMN_MAJOR)
         return (Storage::m_data)[row + col * Storage::_rows()];
-      else // RowMajor
+      else // EIGEN_ROW_MAJOR
         return (Storage::m_data)[col + row * Storage::_cols()];
     }
     
     Scalar& _coeffRef(int row, int col)
     {
-      if(_StorageOrder == ColumnMajor)
+      if(_StorageOrder == EIGEN_COLUMN_MAJOR)
         return (Storage::m_data)[row + col * Storage::_rows()];
-      else // RowMajor
+      else // EIGEN_ROW_MAJOR
         return (Storage::m_data)[col + row * Storage::_cols()];
     }
     
@@ -132,12 +135,12 @@ class Matrix : public MatrixBase<_Scalar, Matrix<_Scalar, _Rows, _Cols, _Storage
       if(RowsAtCompileTime == 1)
       {
         assert(other.isVector());
-        resize(1, other.size());
+        resize(1, other.coeffs());
       }
       else if(ColsAtCompileTime == 1)
       {
         assert(other.isVector());
-        resize(other.size(), 1);
+        resize(other.coeffs(), 1);
       }
       else resize(other.rows(), other.cols());
       return Base::operator=(other);
@@ -182,9 +185,9 @@ class Matrix : public MatrixBase<_Scalar, Matrix<_Scalar, _Rows, _Cols, _Storage
     {
       assert(dim > 0);
       assert((RowsAtCompileTime == 1
-              && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == dim))
+              && (ColsAtCompileTime == EIGEN_DYNAMIC || ColsAtCompileTime == dim))
           || (ColsAtCompileTime == 1
-              && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == dim)));
+              && (RowsAtCompileTime == EIGEN_DYNAMIC || RowsAtCompileTime == dim)));
     }
     
     /** This constructor has two very different behaviors, depending on the type of *this.
@@ -207,8 +210,8 @@ class Matrix : public MatrixBase<_Scalar, Matrix<_Scalar, _Rows, _Cols, _Storage
       }
       else
       {
-        assert(x > 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == x)
-            && y > 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == y));
+        assert(x > 0 && (RowsAtCompileTime == EIGEN_DYNAMIC || RowsAtCompileTime == x)
+            && y > 0 && (ColsAtCompileTime == EIGEN_DYNAMIC || ColsAtCompileTime == y));
       }
     }
     /** constructs an initialized 2D vector with given coefficients */
@@ -275,7 +278,7 @@ typedef Matrix<Type, 1, Size>    RowVector##SizeSuffix##TypeSuffix;
 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
-EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X)
+EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, EIGEN_DYNAMIC, X)
 
 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int,                  i)
 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float,                f)
diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h
index a32568d..a81e0ff 100644
--- a/Eigen/src/Core/MatrixBase.h
+++ b/Eigen/src/Core/MatrixBase.h
@@ -62,29 +62,31 @@ template<typename Scalar, typename Derived> class MatrixBase
     {
       /** The number of rows at compile-time. This is just a copy of the value provided
         * by the \a Derived type. If a value is not known at compile-time,
-        * it is set to the \a Dynamic constant.
+        * it is set to the \a EIGEN_DYNAMIC constant.
         * \sa MatrixBase::rows(), MatrixBase::cols(), ColsAtCompileTime, SizeAtCompileTime */
-      static const int RowsAtCompileTime = Derived::RowsAtCompileTime;
+      enum { RowsAtCompileTime = Derived::RowsAtCompileTime };
       
       /** The number of columns at compile-time. This is just a copy of the value provided
         * by the \a Derived type. If a value is not known at compile-time,
-        * it is set to the \a Dynamic constant.
+        * it is set to the \a EIGEN_DYNAMIC constant.
         * \sa MatrixBase::rows(), MatrixBase::cols(), RowsAtCompileTime, SizeAtCompileTime */
-      static const int ColsAtCompileTime = Derived::ColsAtCompileTime;
+      enum { ColsAtCompileTime = Derived::ColsAtCompileTime };
       
       /** This is equal to the number of coefficients, i.e. the number of
-        * rows times the number of columns, or to \a Dynamic if this is not
+        * rows times the number of columns, or to \a EIGEN_DYNAMIC if this is not
         * known at compile-time. \sa RowsAtCompileTime, ColsAtCompileTime */
-      static const int SizeAtCompileTime
-        = Derived::RowsAtCompileTime == Dynamic || Derived::ColsAtCompileTime == Dynamic
-        ? Dynamic : Derived::RowsAtCompileTime * Derived::ColsAtCompileTime;
+      enum { SizeAtCompileTime
+        = Derived::RowsAtCompileTime == EIGEN_DYNAMIC || Derived::ColsAtCompileTime == EIGEN_DYNAMIC
+        ? EIGEN_DYNAMIC : Derived::RowsAtCompileTime * Derived::ColsAtCompileTime
+      };
       
       /** This is set to true if either the number of rows or the number of
         * columns is known at compile-time to be equal to 1. Indeed, in that case,
         * we are dealing with a column-vector (if there is only one column) or with
         * a row-vector (if there is only one row). */
-      static const bool IsVectorAtCompileTime
-        = Derived::RowsAtCompileTime == 1 || Derived::ColsAtCompileTime == 1;
+      enum { IsVectorAtCompileTime
+        = Derived::RowsAtCompileTime == 1 || Derived::ColsAtCompileTime == 1
+      };
     };
     
     /** This is the "reference type" used to pass objects of type MatrixBase as arguments
@@ -113,7 +115,7 @@ template<typename Scalar, typename Derived> class MatrixBase
     int cols() const { return static_cast<const Derived *>(this)->_cols(); }
     /** \returns the number of coefficients, which is \a rows()*cols().
       * \sa rows(), cols(), Traits::SizeAtCompileTime. */
-    int size() const { return rows() * cols(); }
+    int coeffs() const { return rows() * cols(); }
     /** \returns true if either the number of rows or the number of columns is equal to 1.
       * In other words, this function returns
       * \code rows()==1 || cols()==1 \endcode
diff --git a/Eigen/src/Core/MatrixRef.h b/Eigen/src/Core/MatrixRef.h
index 0d97f9b..ce097fd 100644
--- a/Eigen/src/Core/MatrixRef.h
+++ b/Eigen/src/Core/MatrixRef.h
@@ -39,8 +39,10 @@ template<typename MatrixType> class MatrixRef
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixRef)
 
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
 
     int _rows() const { return m_matrix.rows(); }
     int _cols() const { return m_matrix.cols(); }
diff --git a/Eigen/src/Core/MatrixStorage.h b/Eigen/src/Core/MatrixStorage.h
index ebeaf49..cc4b158 100644
--- a/Eigen/src/Core/MatrixStorage.h
+++ b/Eigen/src/Core/MatrixStorage.h
@@ -55,7 +55,7 @@ class MatrixStorage
 };
 
 template<typename Scalar, int ColsAtCompileTime>
-class MatrixStorage<Scalar, Dynamic, ColsAtCompileTime>
+class MatrixStorage<Scalar, EIGEN_DYNAMIC, ColsAtCompileTime>
 {
   protected:
     int m_rows;
@@ -98,7 +98,7 @@ class MatrixStorage<Scalar, Dynamic, ColsAtCompileTime>
 };
 
 template<typename Scalar, int RowsAtCompileTime>
-class MatrixStorage<Scalar, RowsAtCompileTime, Dynamic>
+class MatrixStorage<Scalar, RowsAtCompileTime, EIGEN_DYNAMIC>
 {
   protected:
     int m_cols;
@@ -141,7 +141,7 @@ class MatrixStorage<Scalar, RowsAtCompileTime, Dynamic>
 };
 
 template<typename Scalar>
-class MatrixStorage<Scalar, Dynamic, Dynamic>
+class MatrixStorage<Scalar, EIGEN_DYNAMIC, EIGEN_DYNAMIC>
 {
   protected:
     int m_rows, m_cols;
diff --git a/Eigen/src/Core/Minor.h b/Eigen/src/Core/Minor.h
index c846e16..78ed365 100644
--- a/Eigen/src/Core/Minor.h
+++ b/Eigen/src/Core/Minor.h
@@ -57,11 +57,12 @@ template<typename MatrixType> class Minor
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Minor)
     
   private:
-    static const int
-      RowsAtCompileTime = (MatrixType::Traits::RowsAtCompileTime != Dynamic) ?
-                            MatrixType::Traits::RowsAtCompileTime - 1 : Dynamic,
-      ColsAtCompileTime = (MatrixType::Traits::ColsAtCompileTime != Dynamic) ?
-                            MatrixType::Traits::ColsAtCompileTime - 1 : Dynamic;
+    enum {
+      RowsAtCompileTime = (MatrixType::Traits::RowsAtCompileTime != EIGEN_DYNAMIC) ?
+                            MatrixType::Traits::RowsAtCompileTime - 1 : EIGEN_DYNAMIC,
+      ColsAtCompileTime = (MatrixType::Traits::ColsAtCompileTime != EIGEN_DYNAMIC) ?
+                            MatrixType::Traits::ColsAtCompileTime - 1 : EIGEN_DYNAMIC
+    };
 
     const Minor& _ref() const { return *this; }
     int _rows() const { return m_matrix.rows() - 1; }
diff --git a/Eigen/src/Core/NumTraits.h b/Eigen/src/Core/NumTraits.h
index bb6d5de..ae540da 100644
--- a/Eigen/src/Core/NumTraits.h
+++ b/Eigen/src/Core/NumTraits.h
@@ -41,10 +41,10 @@
   * \li A typedef \a FloatingPoint, giving the "floating-point type" of \a T. If \a T is
   *     \c int, then \a FloatingPoint is a typedef to \c double. Otherwise, \a FloatingPoint
   *     is a typedef to \a T.
-  * \li A static const bool \a IsComplex. It is equal to \c true if \a T is a \c std::complex
-  *     type, and to false otherwise.
-  * \li A static const bool \a HasFloatingPoint. It is equal to \c false if \a T is \c int,
-  *     and to \c true otherwise.
+  * \li An enum value \a IsComplex. It is equal to 1 if \a T is a \c std::complex
+  *     type, and to 0 otherwise.
+  * \li An enum \a HasFloatingPoint. It is equal to \c 0 if \a T is \c int,
+  *     and to \c 1 otherwise.
   */
 template<typename T> struct NumTraits;
 
@@ -52,32 +52,40 @@ template<> struct NumTraits<int>
 {
   typedef int Real;
   typedef double FloatingPoint;
-  static const bool IsComplex = false;
-  static const bool HasFloatingPoint = false;
+  enum {
+    IsComplex = 0,
+    HasFloatingPoint = 0
+  };
 };
 
 template<> struct NumTraits<float>
 {
   typedef float Real;
   typedef float FloatingPoint;
-  static const bool IsComplex = false;
-  static const bool HasFloatingPoint = true;
+  enum {
+    IsComplex = 0,
+    HasFloatingPoint = 1
+  };
 };
 
 template<> struct NumTraits<double>
 {
   typedef double Real;
   typedef double FloatingPoint;
-  static const bool IsComplex = false;
-  static const bool HasFloatingPoint = true;
+  enum {
+    IsComplex = 0,
+    HasFloatingPoint = 1
+  };
 };
 
 template<typename _Real> struct NumTraits<std::complex<_Real> >
 {
   typedef _Real Real;
   typedef std::complex<_Real> FloatingPoint;
-  static const bool IsComplex = true;
-  static const bool HasFloatingPoint = NumTraits<Real>::HasFloatingPoint;
+  enum {
+    IsComplex = 1,
+    HasFloatingPoint = 1 // anyway we don't allow std::complex<int>
+  };
 };
 
 #endif // EIGEN_NUMTRAITS_H
diff --git a/Eigen/src/Core/Ones.h b/Eigen/src/Core/Ones.h
index 3bb1142..31a369d 100644
--- a/Eigen/src/Core/Ones.h
+++ b/Eigen/src/Core/Ones.h
@@ -40,8 +40,10 @@ template<typename MatrixType> class Ones : NoOperatorEquals,
     friend class MatrixBase<Scalar, Ones<MatrixType> >;
   
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
   
     const Ones& _ref() const { return *this; }
     int _rows() const { return m_rows; }
@@ -56,9 +58,9 @@ template<typename MatrixType> class Ones : NoOperatorEquals,
     Ones(int rows, int cols) : m_rows(rows), m_cols(cols)
     {
       assert(rows > 0
-          && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows)
+          && (RowsAtCompileTime == EIGEN_DYNAMIC || RowsAtCompileTime == rows)
           && cols > 0
-          && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols));
+          && (ColsAtCompileTime == EIGEN_DYNAMIC || ColsAtCompileTime == cols));
     }
     
   protected:
diff --git a/Eigen/src/Core/OperatorEquals.h b/Eigen/src/Core/OperatorEquals.h
index 4fe3dbe..5ef20d3 100644
--- a/Eigen/src/Core/OperatorEquals.h
+++ b/Eigen/src/Core/OperatorEquals.h
@@ -30,8 +30,10 @@
 template<typename Derived1, typename Derived2, int UnrollCount>
 struct MatrixOperatorEqualsUnroller
 {
-  static const int col = (UnrollCount-1) / Derived1::Traits::RowsAtCompileTime;
-  static const int row = (UnrollCount-1) % Derived1::Traits::RowsAtCompileTime;
+  enum {
+    col = (UnrollCount-1) / Derived1::Traits::RowsAtCompileTime,
+    row = (UnrollCount-1) % Derived1::Traits::RowsAtCompileTime
+  };
 
   static void run(Derived1 &dst, const Derived2 &src)
   {
@@ -57,7 +59,7 @@ struct MatrixOperatorEqualsUnroller<Derived1, Derived2, 0>
 };
 
 template<typename Derived1, typename Derived2>
-struct MatrixOperatorEqualsUnroller<Derived1, Derived2, Dynamic>
+struct MatrixOperatorEqualsUnroller<Derived1, Derived2, EIGEN_DYNAMIC>
 {
   static void run(Derived1 &, const Derived2 &) {}
 };
@@ -65,7 +67,7 @@ struct MatrixOperatorEqualsUnroller<Derived1, Derived2, Dynamic>
 template<typename Derived1, typename Derived2, int UnrollCount>
 struct VectorOperatorEqualsUnroller
 {
-  static const int index = UnrollCount - 1;
+  enum { index = UnrollCount - 1 };
 
   static void run(Derived1 &dst, const Derived2 &src)
   {
@@ -91,7 +93,7 @@ struct VectorOperatorEqualsUnroller<Derived1, Derived2, 1>
 };
 
 template<typename Derived1, typename Derived2>
-struct VectorOperatorEqualsUnroller<Derived1, Derived2, Dynamic>
+struct VectorOperatorEqualsUnroller<Derived1, Derived2, EIGEN_DYNAMIC>
 {
   static void run(Derived1 &, const Derived2 &) {}
 };
@@ -104,20 +106,20 @@ Derived& MatrixBase<Scalar, Derived>
   if(Traits::IsVectorAtCompileTime && OtherDerived::Traits::IsVectorAtCompileTime)
     // copying a vector expression into a vector
   {
-    assert(size() == other.size());
-    if(EIGEN_UNROLLED_LOOPS && Traits::SizeAtCompileTime != Dynamic && Traits::SizeAtCompileTime <= 25)
+    assert(coeffs() == other.coeffs());
+    if(EIGEN_UNROLLED_LOOPS && Traits::SizeAtCompileTime != EIGEN_DYNAMIC && Traits::SizeAtCompileTime <= 25)
       VectorOperatorEqualsUnroller
         <Derived, OtherDerived, Traits::SizeAtCompileTime>::run
           (*static_cast<Derived*>(this), *static_cast<const OtherDerived*>(&other));
     else
-      for(int i = 0; i < size(); i++)
+      for(int i = 0; i < coeffs(); i++)
         coeffRef(i) = other.coeff(i);
     return *static_cast<Derived*>(this);
   }
   else // copying a matrix expression into a matrix
   {
     assert(rows() == other.rows() && cols() == other.cols());
-    if(EIGEN_UNROLLED_LOOPS && Traits::SizeAtCompileTime != Dynamic && Traits::SizeAtCompileTime <= 25)
+    if(EIGEN_UNROLLED_LOOPS && Traits::SizeAtCompileTime != EIGEN_DYNAMIC && Traits::SizeAtCompileTime <= 25)
       MatrixOperatorEqualsUnroller
         <Derived, OtherDerived, Traits::SizeAtCompileTime>::run
           (*static_cast<Derived*>(this), *static_cast<const OtherDerived*>(&other));
diff --git a/Eigen/src/Core/Opposite.h b/Eigen/src/Core/Opposite.h
index 7f7aabd..93f0fe1 100644
--- a/Eigen/src/Core/Opposite.h
+++ b/Eigen/src/Core/Opposite.h
@@ -49,8 +49,10 @@ template<typename MatrixType> class Opposite : NoOperatorEquals,
     Opposite(const MatRef& matrix) : m_matrix(matrix) {}
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
 
     const Opposite& _ref() const { return *this; }
     int _rows() const { return m_matrix.rows(); }
diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h
index 71e29a0..ddd90db 100644
--- a/Eigen/src/Core/Product.h
+++ b/Eigen/src/Core/Product.h
@@ -48,7 +48,7 @@ struct ProductUnroller<0, Size, Lhs, Rhs>
 };
 
 template<int Index, typename Lhs, typename Rhs>
-struct ProductUnroller<Index, Dynamic, Lhs, Rhs>
+struct ProductUnroller<Index, EIGEN_DYNAMIC, Lhs, Rhs>
 {
   static void run(int, int, const Lhs&, const Rhs&, typename Lhs::Scalar&) {}
 };
@@ -89,8 +89,10 @@ template<typename Lhs, typename Rhs> class Product : NoOperatorEquals,
     }
     
   private:
-    static const int RowsAtCompileTime = Lhs::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = Rhs::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = Lhs::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = Rhs::Traits::ColsAtCompileTime
+    };
 
     const Product& _ref() const { return *this; }
     int _rows() const { return m_lhs.rows(); }
@@ -100,7 +102,7 @@ template<typename Lhs, typename Rhs> class Product : NoOperatorEquals,
     {
       Scalar res;
       if(EIGEN_UNROLLED_LOOPS
-      && Lhs::Traits::ColsAtCompileTime != Dynamic
+      && Lhs::Traits::ColsAtCompileTime != EIGEN_DYNAMIC
       && Lhs::Traits::ColsAtCompileTime <= 16)
         ProductUnroller<Lhs::Traits::ColsAtCompileTime-1,
                         Lhs::Traits::ColsAtCompileTime, LhsRef, RhsRef>
diff --git a/Eigen/src/Core/Random.h b/Eigen/src/Core/Random.h
index bbc74ec..c78808c 100644
--- a/Eigen/src/Core/Random.h
+++ b/Eigen/src/Core/Random.h
@@ -40,8 +40,10 @@ template<typename MatrixType> class Random : NoOperatorEquals,
     friend class MatrixBase<Scalar, Random<MatrixType> >;
   
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
   
     const Random& _ref() const { return *this; }
     int _rows() const { return m_rows; }
@@ -56,9 +58,9 @@ template<typename MatrixType> class Random : NoOperatorEquals,
     Random(int rows, int cols) : m_rows(rows), m_cols(cols)
     {
       assert(rows > 0
-          && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows)
+          && (RowsAtCompileTime == EIGEN_DYNAMIC || RowsAtCompileTime == rows)
           && cols > 0
-          && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols));
+          && (ColsAtCompileTime == EIGEN_DYNAMIC || ColsAtCompileTime == cols));
     }
     
   protected:
diff --git a/Eigen/src/Core/Row.h b/Eigen/src/Core/Row.h
index 5fcab9e..f120f0c 100644
--- a/Eigen/src/Core/Row.h
+++ b/Eigen/src/Core/Row.h
@@ -69,8 +69,10 @@ template<typename MatrixType> class Row
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Row)
     
   private:
-    static const int RowsAtCompileTime = 1,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = 1,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
 
     const Row& _ref() const { return *this; }
     
diff --git a/Eigen/src/Core/ScalarMultiple.h b/Eigen/src/Core/ScalarMultiple.h
index e8261f5..c9f15bf 100644
--- a/Eigen/src/Core/ScalarMultiple.h
+++ b/Eigen/src/Core/ScalarMultiple.h
@@ -49,8 +49,10 @@ template<typename FactorType, typename MatrixType> class ScalarMultiple : NoOper
       : m_matrix(matrix), m_factor(factor) {}
 
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
 
     const ScalarMultiple& _ref() const { return *this; }
     int _rows() const { return m_matrix.rows(); }
diff --git a/Eigen/src/Core/Sum.h b/Eigen/src/Core/Sum.h
index 93cfc4e..7cdedcf 100644
--- a/Eigen/src/Core/Sum.h
+++ b/Eigen/src/Core/Sum.h
@@ -55,8 +55,10 @@ template<typename Lhs, typename Rhs> class Sum : NoOperatorEquals,
     }
 
   private:
-    static const int RowsAtCompileTime = Lhs::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = Rhs::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = Lhs::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = Rhs::Traits::ColsAtCompileTime
+    };
 
     const Sum& _ref() const { return *this; }
     int _rows() const { return m_lhs.rows(); }
diff --git a/Eigen/src/Core/Trace.h b/Eigen/src/Core/Trace.h
index e87ffec..0e57696 100644
--- a/Eigen/src/Core/Trace.h
+++ b/Eigen/src/Core/Trace.h
@@ -43,7 +43,7 @@ template<int Rows, typename Derived> struct TraceUnroller<0, Rows, Derived>
   }
 };
 
-template<int Index, typename Derived> struct TraceUnroller<Index, Dynamic, Derived>
+template<int Index, typename Derived> struct TraceUnroller<Index, EIGEN_DYNAMIC, Derived>
 {
   static void run(const Derived&, typename Derived::Scalar&) {}
 };
@@ -62,7 +62,7 @@ Scalar MatrixBase<Scalar, Derived>::trace() const
 {
   assert(rows() == cols());
   Scalar res;
-  if(EIGEN_UNROLLED_LOOPS && Traits::RowsAtCompileTime != Dynamic && Traits::RowsAtCompileTime <= 16)
+  if(EIGEN_UNROLLED_LOOPS && Traits::RowsAtCompileTime != EIGEN_DYNAMIC && Traits::RowsAtCompileTime <= 16)
     TraceUnroller<Traits::RowsAtCompileTime-1, Traits::RowsAtCompileTime, Derived>
       ::run(*static_cast<const Derived*>(this), res);
   else
diff --git a/Eigen/src/Core/Transpose.h b/Eigen/src/Core/Transpose.h
index fbb37bc..21e6168 100644
--- a/Eigen/src/Core/Transpose.h
+++ b/Eigen/src/Core/Transpose.h
@@ -51,8 +51,10 @@ template<typename MatrixType> class Transpose
     EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Transpose)
     
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::ColsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::RowsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::ColsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::RowsAtCompileTime
+    };
 
     const Transpose& _ref() const { return *this; }
     int _rows() const { return m_matrix.cols(); }
diff --git a/Eigen/src/Core/Util.h b/Eigen/src/Core/Util.h
index 288d999..09c2c65 100644
--- a/Eigen/src/Core/Util.h
+++ b/Eigen/src/Core/Util.h
@@ -32,8 +32,10 @@
 #define EIGEN_UNROLLED_LOOPS (true)
 #endif
 
-#ifndef EIGEN_DEFAULT_MATRIX_STORAGE_ORDER
-#define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER ColumnMajor
+#ifdef EIGEN_DEFAULT_TO_ROW_MAJOR
+#define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER EIGEN_ROW_MAJOR
+#else
+#define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER EIGEN_COLUMN_MAJOR
 #endif
 
 #undef minor
@@ -86,16 +88,13 @@ EIGEN_INHERIT_ASSIGNMENT_OPERATOR(Derived, -=) \
 EIGEN_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, *=) \
 EIGEN_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, /=)
 
-const int Dynamic = -1;
-
-enum MatrixStorageOrder
-{
-  ColumnMajor,
-  RowMajor
-};
+#define EIGEN_DYNAMIC -1
+#define EIGEN_GENERIC -2
+#define EIGEN_COLUMN_MAJOR 0
+#define EIGEN_ROW_MAJOR 1
 
 //forward declarations
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
   class Matrix;
 template<typename MatrixType> class MatrixRef;
 template<typename NewScalar, typename MatrixType> class Cast;
@@ -125,7 +124,7 @@ template<typename T> struct ForwardDecl
   typedef T Ref;
 };
 
-template<typename _Scalar, int _Rows, int _Cols, MatrixStorageOrder _StorageOrder>
+template<typename _Scalar, int _Rows, int _Cols, int _StorageOrder>
 struct ForwardDecl<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> >
 {
   typedef MatrixRef<Matrix<_Scalar, _Rows, _Cols, _StorageOrder> > Ref;
diff --git a/Eigen/src/Core/Zero.h b/Eigen/src/Core/Zero.h
index 76c13b4..6ed4d65 100644
--- a/Eigen/src/Core/Zero.h
+++ b/Eigen/src/Core/Zero.h
@@ -40,8 +40,10 @@ template<typename MatrixType> class Zero : NoOperatorEquals,
     friend class MatrixBase<Scalar, Zero<MatrixType> >;
   
   private:
-    static const int RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
-                     ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime;
+    enum {
+      RowsAtCompileTime = MatrixType::Traits::RowsAtCompileTime,
+      ColsAtCompileTime = MatrixType::Traits::ColsAtCompileTime
+    };
 
     const Zero& _ref() const { return *this; }
     int _rows() const { return m_rows; }
@@ -56,9 +58,9 @@ template<typename MatrixType> class Zero : NoOperatorEquals,
     Zero(int rows, int cols) : m_rows(rows), m_cols(cols)
     {
       assert(rows > 0
-          && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows)
+          && (RowsAtCompileTime == EIGEN_DYNAMIC || RowsAtCompileTime == rows)
           && cols > 0
-          && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols));
+          && (ColsAtCompileTime == EIGEN_DYNAMIC || ColsAtCompileTime == cols));
     }
     
   protected:
diff --git a/doc/benchmark_suite b/doc/benchmark_suite
index b75a8df..871acf4 100755
--- a/doc/benchmark_suite
+++ b/doc/benchmark_suite
@@ -1,16 +1,16 @@
-echo "Fixed size 3x3, ColumnMajor, -DNDEBUG"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=ColumnMajor -DNDEBUG benchmark.cpp -o benchmark && time ./benchmark >/dev/null
-echo "Fixed size 3x3, ColumnMajor, with asserts"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=ColumnMajor benchmark.cpp -o benchmark && time ./benchmark >/dev/null
-echo "Fixed size 3x3, RowMajor, -DNDEBUG"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=RowMajor -DNDEBUG benchmark.cpp -o benchmark && time ./benchmark >/dev/null
-echo "Fixed size 3x3, RowMajor, with asserts"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=RowMajor benchmark.cpp -o benchmark && time ./benchmark >/dev/null
-echo "Dynamic size 20x20, ColumnMajor, -DNDEBUG"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=ColumnMajor -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
-echo "Dynamic size 20x20, ColumnMajor, with asserts"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=ColumnMajor benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
-echo "Dynamic size 20x20, RowMajor, -DNDEBUG"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=RowMajor -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
-echo "Dynamic size 20x20, RowMajor, with asserts"
-g++ -O3 -I .. -DEIGEN_DEFAULT_MATRIX_STORAGE_ORDER=RowMajor benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
+echo "Fixed size 3x3, EIGEN_COLUMN_MAJOR, -DNDEBUG"
+g++ -O3 -I .. -DNDEBUG benchmark.cpp -o benchmark && time ./benchmark >/dev/null
+echo "Fixed size 3x3, EIGEN_COLUMN_MAJOR, with asserts"
+g++ -O3 -I .. benchmark.cpp -o benchmark && time ./benchmark >/dev/null
+echo "Fixed size 3x3, EIGEN_ROW_MAJOR, -DNDEBUG"
+g++ -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR -DNDEBUG benchmark.cpp -o benchmark && time ./benchmark >/dev/null
+echo "Fixed size 3x3, EIGEN_ROW_MAJOR, with asserts"
+g++ -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR benchmark.cpp -o benchmark && time ./benchmark >/dev/null
+echo "EIGEN_DYNAMIC size 20x20, EIGEN_COLUMN_MAJOR, -DNDEBUG"
+g++ -O3 -I .. -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
+echo "EIGEN_DYNAMIC size 20x20, EIGEN_COLUMN_MAJOR, with asserts"
+g++ -O3 -I .. benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
+echo "EIGEN_DYNAMIC size 20x20, EIGEN_ROW_MAJOR, -DNDEBUG"
+g++ -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
+echo "EIGEN_DYNAMIC size 20x20, EIGEN_ROW_MAJOR, with asserts"
+g++ -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null
diff --git a/test/main.h b/test/main.h
index d914a14..93badad 100644
--- a/test/main.h
+++ b/test/main.h
@@ -28,7 +28,7 @@
 
 #include <QtTest/QtTest>
 
-//#define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER RowMajor
+//#define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER EIGEN_ROW_MAJOR
 #define EIGEN_INTERNAL_DEBUGGING
 #include <Eigen/Core>
 
diff --git a/test/map.cpp b/test/map.cpp
index 4f28a85..99de551 100644
--- a/test/map.cpp
+++ b/test/map.cpp
@@ -31,7 +31,7 @@ template<typename VectorType> void tmap(const VectorType& m)
 {
   typedef typename VectorType::Scalar Scalar;
   
-  int size = m.size();
+  int size = m.coeffs();
   
   // test Map.h
   Scalar* array1 = new Scalar[size];
diff --git a/test/submatrices.cpp b/test/submatrices.cpp
index 9981d9f..2a61956 100644
--- a/test/submatrices.cpp
+++ b/test/submatrices.cpp
@@ -67,7 +67,7 @@ template<typename MatrixType> void submatrices(const MatrixType& m)
   m1.col(c1) += s1 * m1.col(c2);
   
   //check dynBlock()
-  Matrix<Scalar,Dynamic,Dynamic> b1(1,1); b1(0,0) = m1(r1,c1);
+  Matrix<Scalar,EIGEN_DYNAMIC,EIGEN_DYNAMIC> b1(1,1); b1(0,0) = m1(r1,c1);
   RowVectorType br1(m1.dynBlock(r1,0,1,cols));
   VectorType bc1(m1.dynBlock(0,c1,rows,1));
   VERIFY_IS_APPROX(b1, m1.dynBlock(r1,c1,1,1));
@@ -80,7 +80,7 @@ template<typename MatrixType> void submatrices(const MatrixType& m)
   //check minor()
   if(rows > 1 && cols > 1)
   {
-    Matrix<Scalar, Dynamic, Dynamic> mi = m1.minor(0,0).eval();
+    Matrix<Scalar, EIGEN_DYNAMIC, EIGEN_DYNAMIC> mi = m1.minor(0,0).eval();
     VERIFY_IS_APPROX(mi, m1.dynBlock(1,1,rows-1,cols-1));
     mi = m1.minor(r1,c1);
     VERIFY_IS_APPROX(mi.transpose(), m1.transpose().minor(c1,r1));

Attachment: signature.asc
Description: This is a digitally signed message part.



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/