diff options
author | 2007-12-19 08:14:00 +0000 | |
---|---|---|
committer | 2007-12-19 08:14:00 +0000 | |
commit | 59be5c31242a333502a76b53122f69306382cd6f (patch) | |
tree | 63cf95435ca05260c3f0af73334caf8233141771 /src/Core | |
parent | 8bb98a80b462c55f63f11be7c24c1822554f2153 (diff) |
enforce constness in map(), do only one const_cast, and improve API
Diffstat (limited to 'src/Core')
-rw-r--r-- | src/Core/Map.h | 34 | ||||
-rw-r--r-- | src/Core/MatrixBase.h | 9 |
2 files changed, 34 insertions, 9 deletions
diff --git a/src/Core/Map.h b/src/Core/Map.h index 02852a9f6..e8300a7c3 100644 --- a/src/Core/Map.h +++ b/src/Core/Map.h @@ -36,7 +36,7 @@ template<typename MatrixType> class Map static const int RowsAtCompileTime = MatrixType::RowsAtCompileTime, ColsAtCompileTime = MatrixType::ColsAtCompileTime; - Map(Scalar* data, int rows, int cols) : m_data(data), m_rows(rows), m_cols(cols) + Map(const Scalar* data, int rows, int cols) : m_data(data), m_rows(rows), m_cols(cols) { assert(rows > 0 && cols > 0); } @@ -55,22 +55,22 @@ template<typename MatrixType> class Map Scalar& _coeffRef(int row, int col) { - return m_data[row + col * m_rows]; + return const_cast<Scalar*>(m_data)[row + col * m_rows]; } protected: - Scalar* m_data; + const Scalar* m_data; int m_rows, m_cols; }; template<typename Scalar, typename Derived> -Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data, int rows, int cols) +const Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data, int rows, int cols) { return Map<Derived>(const_cast<Scalar*>(data), rows, cols); } template<typename Scalar, typename Derived> -Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data, int size) +const Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data, int size) { assert(IsVector); if(ColsAtCompileTime == 1) @@ -80,11 +80,33 @@ Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data, int size) } template<typename Scalar, typename Derived> -Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data) +const Map<Derived> MatrixBase<Scalar, Derived>::map(const Scalar* data) { return Map<Derived>(const_cast<Scalar*>(data), RowsAtCompileTime, ColsAtCompileTime); } +template<typename Scalar, typename Derived> +Map<Derived> MatrixBase<Scalar, Derived>::map(Scalar* data, int rows, int cols) +{ + return Map<Derived>(data, rows, cols); +} + +template<typename Scalar, typename Derived> +Map<Derived> MatrixBase<Scalar, Derived>::map(Scalar* data, int size) +{ + assert(IsVector); + if(ColsAtCompileTime == 1) + return Map<Derived>(data, size, 1); + else + return Map<Derived>(data, 1, size); +} + +template<typename Scalar, typename Derived> +Map<Derived> MatrixBase<Scalar, Derived>::map(Scalar* data) +{ + return Map<Derived>(data, RowsAtCompileTime, ColsAtCompileTime); +} + template<typename _Scalar, int _Rows, int _Cols> Matrix<_Scalar, _Rows, _Cols> ::Matrix(const Scalar *data, int rows, int cols) diff --git a/src/Core/MatrixBase.h b/src/Core/MatrixBase.h index c37b098f8..83b6fa169 100644 --- a/src/Core/MatrixBase.h +++ b/src/Core/MatrixBase.h @@ -95,9 +95,12 @@ template<typename Scalar, typename Derived> class MatrixBase diagonal(const OtherDerived& coeffs); DiagonalCoeffs<Derived> diagonal() const; - static Map<Derived> map(const Scalar* array, int rows, int cols); - static Map<Derived> map(const Scalar* array, int size); - static Map<Derived> map(const Scalar* array); + static const Map<Derived> map(const Scalar* array, int rows, int cols); + static const Map<Derived> map(const Scalar* array, int size); + static const Map<Derived> map(const Scalar* array); + static Map<Derived> map(Scalar* array, int rows, int cols); + static Map<Derived> map(Scalar* array, int size); + static Map<Derived> map(Scalar* array); template<typename OtherDerived> bool isApprox( |