aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2014-12-05 12:49:30 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2014-12-05 12:49:30 +0100
commit80ed5bd90c245655ce0f892f6a679a0278ccbbab (patch)
treee889cbd54790fc2a72e94a8ee4d5884d2b0cfd28 /Eigen
parent6ccf97f3e6ce39c210e225ba7aae66da15b71660 (diff)
Workaround various "returning reference to temporary" warnings.
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/SparseCore7
-rw-r--r--Eigen/src/Core/CoreEvaluators.h4
-rw-r--r--Eigen/src/Core/util/Constants.h3
-rw-r--r--Eigen/src/SparseCore/CompressedStorage.h2
-rw-r--r--Eigen/src/SparseCore/SparseMatrix.h4
5 files changed, 9 insertions, 11 deletions
diff --git a/Eigen/SparseCore b/Eigen/SparseCore
index b68c8fa8a..d5c0f6271 100644
--- a/Eigen/SparseCore
+++ b/Eigen/SparseCore
@@ -26,13 +26,6 @@
* This module depends on: Core.
*/
-namespace Eigen {
-
-/** The type used to identify a general sparse storage. */
-struct Sparse {};
-
-}
-
#include "src/SparseCore/SparseUtil.h"
#include "src/SparseCore/SparseMatrixBase.h"
#include "src/SparseCore/SparseAssign.h"
diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h
index a0dc72c4d..1c7123b85 100644
--- a/Eigen/src/Core/CoreEvaluators.h
+++ b/Eigen/src/Core/CoreEvaluators.h
@@ -1221,7 +1221,9 @@ struct evaluator<Diagonal<ArgType, DiagIndex> >
typedef typename XprType::Index Index;
typedef typename XprType::Scalar Scalar;
- typedef typename XprType::CoeffReturnType CoeffReturnType;
+ // FIXME having to check whether ArgType is sparse here i not very nice.
+ typedef typename internal::conditional<!internal::is_same<typename ArgType::StorageKind,Sparse>::value,
+ typename XprType::CoeffReturnType,Scalar>::type CoeffReturnType;
EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index row, Index) const
{
diff --git a/Eigen/src/Core/util/Constants.h b/Eigen/src/Core/util/Constants.h
index 5c7d70af6..9b40093f0 100644
--- a/Eigen/src/Core/util/Constants.h
+++ b/Eigen/src/Core/util/Constants.h
@@ -449,6 +449,9 @@ enum Action {GetAction, SetAction};
/** The type used to identify a dense storage. */
struct Dense {};
+/** The type used to identify a general sparse storage. */
+struct Sparse {};
+
/** The type used to identify a permutation storage. */
struct PermutationStorage {};
diff --git a/Eigen/src/SparseCore/CompressedStorage.h b/Eigen/src/SparseCore/CompressedStorage.h
index 2741f8292..99f741138 100644
--- a/Eigen/src/SparseCore/CompressedStorage.h
+++ b/Eigen/src/SparseCore/CompressedStorage.h
@@ -143,7 +143,7 @@ class CompressedStorage
}
/** Like at(), but the search is performed in the range [start,end) */
- inline const Scalar& atInRange(size_t start, size_t end, Index key, const Scalar& defaultValue = Scalar(0)) const
+ inline Scalar atInRange(size_t start, size_t end, Index key, const Scalar &defaultValue = Scalar(0)) const
{
if (start>=end)
return defaultValue;
diff --git a/Eigen/src/SparseCore/SparseMatrix.h b/Eigen/src/SparseCore/SparseMatrix.h
index 4c79c7dc3..93677c786 100644
--- a/Eigen/src/SparseCore/SparseMatrix.h
+++ b/Eigen/src/SparseCore/SparseMatrix.h
@@ -179,7 +179,7 @@ class SparseMatrix
/** \returns the value of the matrix at position \a i, \a j
* This function returns Scalar(0) if the element is an explicit \em zero */
- inline const Scalar& coeff(Index row, Index col) const
+ inline Scalar coeff(Index row, Index col) const
{
eigen_assert(row>=0 && row<rows() && col>=0 && col<cols());
@@ -1297,7 +1297,7 @@ struct evaluator<SparseMatrix<_Scalar,_Options,_Index> >
operator const SparseMatrixType&() const { return *m_matrix; }
typedef typename DenseCoeffsBase<SparseMatrixType,ReadOnlyAccessors>::CoeffReturnType CoeffReturnType;
- CoeffReturnType coeff(Index row, Index col) const
+ Scalar coeff(Index row, Index col) const
{ return m_matrix->coeff(row,col); }
Scalar& coeffRef(Index row, Index col)