aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/Core1
-rw-r--r--Eigen/src/Array/ArrayBase.h1
-rw-r--r--Eigen/src/Core/DenseBase.h96
-rw-r--r--Eigen/src/Core/DenseDirectAccessBase.h138
-rw-r--r--Eigen/src/Core/DenseStorageBase.h4
-rw-r--r--Eigen/src/Core/MapBase.h5
-rw-r--r--Eigen/src/Core/Matrix.h1
-rw-r--r--Eigen/src/Core/MatrixBase.h1
-rw-r--r--Eigen/src/Core/Transpose.h2
-rw-r--r--unsupported/Eigen/FFT16
10 files changed, 105 insertions, 160 deletions
diff --git a/Eigen/Core b/Eigen/Core
index e92ea5700..07d82d155 100644
--- a/Eigen/Core
+++ b/Eigen/Core
@@ -233,7 +233,6 @@ using std::size_t;
#include "src/Core/Functors.h"
#include "src/Core/DenseBase.h"
-#include "src/Core/DenseDirectAccessBase.h"
#include "src/Core/MatrixBase.h"
#include "src/Core/EigenBase.h"
#include "src/Core/Coeffs.h"
diff --git a/Eigen/src/Array/ArrayBase.h b/Eigen/src/Array/ArrayBase.h
index 97807e5fc..c961911bb 100644
--- a/Eigen/src/Array/ArrayBase.h
+++ b/Eigen/src/Array/ArrayBase.h
@@ -73,7 +73,6 @@ template<typename Derived> class ArrayBase
using Base::IsVectorAtCompileTime;
using Base::Flags;
using Base::CoeffReadCost;
- using Base::_HasDirectAccess;
using Base::derived;
using Base::const_cast_derived;
diff --git a/Eigen/src/Core/DenseBase.h b/Eigen/src/Core/DenseBase.h
index da464067b..e93518dae 100644
--- a/Eigen/src/Core/DenseBase.h
+++ b/Eigen/src/Core/DenseBase.h
@@ -26,6 +26,53 @@
#ifndef EIGEN_DENSEBASE_H
#define EIGEN_DENSEBASE_H
+template<typename Derived> struct ei_has_direct_access
+{
+ enum { ret = (ei_traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 };
+};
+
+template<typename Derived, bool _HasDirectAccess = ei_has_direct_access<Derived>::ret>
+struct ei_inner_stride_at_compile_time
+{
+ enum { ret = ei_traits<Derived>::InnerStrideAtCompileTime };
+};
+
+template<typename Derived>
+struct ei_inner_stride_at_compile_time<Derived, false>
+{
+ enum { ret = 0 };
+};
+
+template<typename Derived, bool _HasDirectAccess = ei_has_direct_access<Derived>::ret>
+struct ei_outer_stride_at_compile_time
+{
+ enum { ret = ei_traits<Derived>::OuterStrideAtCompileTime };
+};
+
+template<typename Derived>
+struct ei_outer_stride_at_compile_time<Derived, false>
+{
+ enum { ret = 0 };
+};
+
+template<typename Derived, typename XprKind = typename ei_traits<Derived>::XprKind>
+struct ei_dense_xpr_base
+{
+ /* ei_dense_xpr_base should only ever be used on dense expressions, thus falling either into the MatrixXpr or into the ArrayXpr cases */
+};
+
+template<typename Derived>
+struct ei_dense_xpr_base<Derived, MatrixXpr>
+{
+ typedef MatrixBase<Derived> type;
+};
+
+template<typename Derived>
+struct ei_dense_xpr_base<Derived, ArrayXpr>
+{
+ typedef ArrayBase<Derived> type;
+};
+
/** \class DenseBase
*
* \brief Base class for all dense matrices, vectors, and arrays
@@ -134,9 +181,8 @@ template<typename Derived> class DenseBase
* this expression.
*/
-#ifndef EIGEN_PARSED_BY_DOXYGEN
- _HasDirectAccess = (int(Flags)&DirectAccessBit) ? 1 : 0 // workaround sunCC
-#endif
+ InnerStrideAtCompileTime = ei_inner_stride_at_compile_time<Derived>::ret,
+ OuterStrideAtCompileTime = ei_outer_stride_at_compile_time<Derived>::ret
};
#ifndef EIGEN_PARSED_BY_DOXYGEN
@@ -208,7 +254,7 @@ template<typename Derived> class DenseBase
#ifndef EIGEN_PARSED_BY_DOXYGEN
/** \internal the return type of coeff()
*/
- typedef typename ei_meta_if<_HasDirectAccess, const Scalar&, Scalar>::ret CoeffReturnType;
+ typedef typename ei_meta_if<ei_has_direct_access<Derived>::ret, const Scalar&, Scalar>::ret CoeffReturnType;
/** \internal Represents a matrix with all coefficients equal to one another*/
typedef CwiseNullaryOp<ei_scalar_constant_op<Scalar>,Derived> ConstantReturnType;
@@ -270,6 +316,48 @@ template<typename Derived> class DenseBase
Derived& lazyAssign(const DenseBase<OtherDerived>& other);
#endif // not EIGEN_PARSED_BY_DOXYGEN
+ /** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
+ *
+ * \sa outerStride(), rowStride(), colStride()
+ */
+ inline int innerStride() const
+ {
+ return derived().innerStride();
+ }
+
+ /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
+ * in a column-major matrix).
+ *
+ * \sa innerStride(), rowStride(), colStride()
+ */
+ inline int outerStride() const
+ {
+ return derived().outerStride();
+ }
+
+ inline int stride() const
+ {
+ return IsVectorAtCompileTime ? innerStride() : outerStride();
+ }
+
+ /** \returns the pointer increment between two consecutive rows.
+ *
+ * \sa innerStride(), outerStride(), colStride()
+ */
+ inline int rowStride() const
+ {
+ return IsRowMajor ? outerStride() : innerStride();
+ }
+
+ /** \returns the pointer increment between two consecutive columns.
+ *
+ * \sa innerStride(), outerStride(), rowStride()
+ */
+ inline int colStride() const
+ {
+ return IsRowMajor ? innerStride() : outerStride();
+ }
+
CommaInitializer<Derived> operator<< (const Scalar& s);
template<unsigned int Added,unsigned int Removed>
diff --git a/Eigen/src/Core/DenseDirectAccessBase.h b/Eigen/src/Core/DenseDirectAccessBase.h
deleted file mode 100644
index a62debcc6..000000000
--- a/Eigen/src/Core/DenseDirectAccessBase.h
+++ /dev/null
@@ -1,138 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2010 Benoit Jacob <jacob.benoit.1@gmail.com>
-//
-// 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 <http://www.gnu.org/licenses/>.
-
-#ifndef EIGEN_DENSEDIRECTACCESSBASE_H
-#define EIGEN_DENSEDIRECTACCESSBASE_H
-
-template<typename Derived> struct ei_has_direct_access
-{
- enum { ret = (ei_traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 };
-};
-
-template<typename Derived, bool _HasDirectAccess = ei_has_direct_access<Derived>::ret>
-struct ei_inner_stride_at_compile_time
-{
- enum { ret = ei_traits<Derived>::InnerStrideAtCompileTime };
-};
-
-template<typename Derived>
-struct ei_inner_stride_at_compile_time<Derived, false>
-{
- enum { ret = 0 };
-};
-
-template<typename Derived, bool _HasDirectAccess = ei_has_direct_access<Derived>::ret>
-struct ei_outer_stride_at_compile_time
-{
- enum { ret = ei_traits<Derived>::OuterStrideAtCompileTime };
-};
-
-template<typename Derived>
-struct ei_outer_stride_at_compile_time<Derived, false>
-{
- enum { ret = 0 };
-};
-
-template<typename Derived, typename XprKind = typename ei_traits<Derived>::XprKind>
-struct ei_dense_xpr_base
-{
- /* ei_dense_xpr_base should only ever be used on dense expressions, thus falling either into the MatrixXpr or into the ArrayXpr cases */
-};
-
-template<typename Derived>
-struct ei_dense_xpr_base<Derived, MatrixXpr>
-{
- typedef MatrixBase<Derived> type;
-};
-
-template<typename Derived>
-struct ei_dense_xpr_base<Derived, ArrayXpr>
-{
- typedef ArrayBase<Derived> type;
-};
-
-template<typename Derived> class DenseDirectAccessBase
- : public ei_dense_xpr_base<Derived>::type
-{
- public:
-
- typedef typename ei_dense_xpr_base<Derived>::type Base;
-
- using Base::IsVectorAtCompileTime;
- using Base::IsRowMajor;
- using Base::derived;
- using Base::operator=;
-
- typedef typename Base::CoeffReturnType CoeffReturnType;
-
- enum {
- InnerStrideAtCompileTime = ei_traits<Derived>::InnerStrideAtCompileTime,
- OuterStrideAtCompileTime = ei_traits<Derived>::OuterStrideAtCompileTime
- };
-
- /** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
- *
- * \sa outerStride(), rowStride(), colStride()
- */
- inline int innerStride() const
- {
- return derived().innerStride();
- }
-
- /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
- * in a column-major matrix).
- *
- * \sa innerStride(), rowStride(), colStride()
- */
- inline int outerStride() const
- {
- return derived().outerStride();
- }
-
- inline int stride() const
- {
- return IsVectorAtCompileTime ? innerStride() : outerStride();
- }
-
- /** \returns the pointer increment between two consecutive rows.
- *
- * \sa innerStride(), outerStride(), colStride()
- */
- inline int rowStride() const
- {
- return IsRowMajor ? outerStride() : innerStride();
- }
-
- /** \returns the pointer increment between two consecutive columns.
- *
- * \sa innerStride(), outerStride(), rowStride()
- */
- inline int colStride() const
- {
- return IsRowMajor ? innerStride() : outerStride();
- }
-
-};
-
-#endif // EIGEN_DENSEDIRECTACCESSBASE_H
diff --git a/Eigen/src/Core/DenseStorageBase.h b/Eigen/src/Core/DenseStorageBase.h
index 220cd86c7..d2bbb07f7 100644
--- a/Eigen/src/Core/DenseStorageBase.h
+++ b/Eigen/src/Core/DenseStorageBase.h
@@ -39,11 +39,11 @@ template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers> struct e
* \brief Dense storage base class for matrices and arrays.
**/
template<typename Derived>
-class DenseStorageBase : public DenseDirectAccessBase<Derived>
+class DenseStorageBase : public ei_dense_xpr_base<Derived>::type
{
public:
enum { Options = ei_traits<Derived>::Options };
- typedef typename ei_traits<Derived>::XprBase Base;
+ typedef typename ei_dense_xpr_base<Derived>::type Base;
typedef typename Base::PlainObject PlainObject;
typedef typename Base::Scalar Scalar;
typedef typename Base::PacketScalar PacketScalar;
diff --git a/Eigen/src/Core/MapBase.h b/Eigen/src/Core/MapBase.h
index 283d19a58..5674094c4 100644
--- a/Eigen/src/Core/MapBase.h
+++ b/Eigen/src/Core/MapBase.h
@@ -33,11 +33,11 @@
* \sa class Map, class Block
*/
template<typename Derived> class MapBase
- : public DenseDirectAccessBase<Derived>
+ : public ei_dense_xpr_base<Derived>::type
{
public:
- typedef DenseDirectAccessBase<Derived> Base;
+ typedef typename ei_dense_xpr_base<Derived>::type Base;
enum {
RowsAtCompileTime = ei_traits<Derived>::RowsAtCompileTime,
ColsAtCompileTime = ei_traits<Derived>::ColsAtCompileTime,
@@ -58,7 +58,6 @@ template<typename Derived> class MapBase
using Base::IsRowMajor;
using Base::CoeffReadCost;
- using Base::_HasDirectAccess;
// using Base::derived;
using Base::const_cast_derived;
diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h
index e2aef513c..76547f9e2 100644
--- a/Eigen/src/Core/Matrix.h
+++ b/Eigen/src/Core/Matrix.h
@@ -114,7 +114,6 @@ struct ei_traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
typedef _Scalar Scalar;
typedef Dense StorageKind;
typedef MatrixXpr XprKind;
- typedef MatrixBase<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > XprBase;
enum {
RowsAtCompileTime = _Rows,
ColsAtCompileTime = _Cols,
diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h
index 4496eccf1..97a372222 100644
--- a/Eigen/src/Core/MatrixBase.h
+++ b/Eigen/src/Core/MatrixBase.h
@@ -75,7 +75,6 @@ template<typename Derived> class MatrixBase
using Base::IsVectorAtCompileTime;
using Base::Flags;
using Base::CoeffReadCost;
- using Base::_HasDirectAccess;
using Base::derived;
using Base::const_cast_derived;
diff --git a/Eigen/src/Core/Transpose.h b/Eigen/src/Core/Transpose.h
index 762c17b97..c786b1b64 100644
--- a/Eigen/src/Core/Transpose.h
+++ b/Eigen/src/Core/Transpose.h
@@ -90,7 +90,7 @@ template<typename MatrixType> class Transpose
template<typename MatrixType, bool _HasDirectAccess = ei_has_direct_access<MatrixType>::ret>
struct ei_TransposeImpl_base
{
- typedef DenseDirectAccessBase<Transpose<MatrixType> > type;
+ typedef typename ei_dense_xpr_base<Transpose<MatrixType> >::type type;
};
template<typename MatrixType>
diff --git a/unsupported/Eigen/FFT b/unsupported/Eigen/FFT
index 2a1e21007..a41a89a8a 100644
--- a/unsupported/Eigen/FFT
+++ b/unsupported/Eigen/FFT
@@ -222,7 +222,7 @@ class FFT
template<typename InputDerived, typename ComplexDerived>
inline
- void fwd( DenseDirectAccessBase<ComplexDerived> & dst, const DenseDirectAccessBase<InputDerived> & src,int nfft=-1)
+ void fwd( MatrixBase<ComplexDerived> & dst, const MatrixBase<InputDerived> & src,int nfft=-1)
{
typedef typename ComplexDerived::Scalar dst_type;
typedef typename InputDerived::Scalar src_type;
@@ -258,18 +258,18 @@ class FFT
template<typename InputDerived>
inline
- fft_fwd_proxy< DenseDirectAccessBase<InputDerived>, FFT<T_Scalar,T_Impl> >
- fwd( const DenseDirectAccessBase<InputDerived> & src,int nfft=-1)
+ fft_fwd_proxy< MatrixBase<InputDerived>, FFT<T_Scalar,T_Impl> >
+ fwd( const MatrixBase<InputDerived> & src,int nfft=-1)
{
- return fft_fwd_proxy< DenseDirectAccessBase<InputDerived> ,FFT<T_Scalar,T_Impl> >( src, *this,nfft );
+ return fft_fwd_proxy< MatrixBase<InputDerived> ,FFT<T_Scalar,T_Impl> >( src, *this,nfft );
}
template<typename InputDerived>
inline
- fft_inv_proxy< DenseDirectAccessBase<InputDerived>, FFT<T_Scalar,T_Impl> >
- inv( const DenseDirectAccessBase<InputDerived> & src,int nfft=-1)
+ fft_inv_proxy< MatrixBase<InputDerived>, FFT<T_Scalar,T_Impl> >
+ inv( const MatrixBase<InputDerived> & src,int nfft=-1)
{
- return fft_inv_proxy< DenseDirectAccessBase<InputDerived> ,FFT<T_Scalar,T_Impl> >( src, *this,nfft );
+ return fft_inv_proxy< MatrixBase<InputDerived> ,FFT<T_Scalar,T_Impl> >( src, *this,nfft );
}
inline
@@ -290,7 +290,7 @@ class FFT
template<typename OutputDerived, typename ComplexDerived>
inline
- void inv( DenseDirectAccessBase<OutputDerived> & dst, const DenseDirectAccessBase<ComplexDerived> & src, int nfft=-1)
+ void inv( MatrixBase<OutputDerived> & dst, const MatrixBase<ComplexDerived> & src, int nfft=-1)
{
typedef typename ComplexDerived::Scalar src_type;
typedef typename OutputDerived::Scalar dst_type;