aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2017-01-10 16:55:07 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2017-01-10 16:55:07 +0100
commitc9d5e5c6dac14fac1a4bc16b6e1570479daeacb8 (patch)
tree3aa470ff47d491646afb0c050bc63ac662f30abd /Eigen/src
parent407e7b7a9376dd3f722f0fc08fb806b3970e594d (diff)
Simplify Symbolic API: std::tuple is now used internally and automatically built.
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/Core/ArithmeticSequence.h23
1 files changed, 14 insertions, 9 deletions
diff --git a/Eigen/src/Core/ArithmeticSequence.h b/Eigen/src/Core/ArithmeticSequence.h
index 01cc5e15b..bbedd99c2 100644
--- a/Eigen/src/Core/ArithmeticSequence.h
+++ b/Eigen/src/Core/ArithmeticSequence.h
@@ -37,7 +37,7 @@ static const all_t all;
* auto expr = (x+3)/y+z;
*
* // And evaluate it: (c++14)
- * std::cout << expr.eval(std::make_tuple(x=6,y=3,z=-13)) << "\n";
+ * std::cout << expr.eval(x=6,y=3,z=-13) << "\n";
*
* // In c++98/11, only one symbol per expression is supported for now:
* auto expr98 = (3-x)/2;
@@ -60,7 +60,7 @@ class ValueExpr {
public:
ValueExpr(Index val) : m_value(val) {}
template<typename T>
- Index eval(const T&) const { return m_value; }
+ Index eval_impl(const T&) const { return m_value; }
protected:
Index m_value;
};
@@ -81,7 +81,12 @@ public:
*
*/
template<typename T>
- Index eval(const T& values) const { return derived().eval(values); }
+ Index eval(const T& values) const { return derived().eval_impl(values); }
+
+#if __cplusplus > 201103L
+ template<typename... Types>
+ Index eval(Types&&... values) const { return derived().eval_impl(std::make_tuple(values...)); }
+#endif
NegateExpr<Derived> operator-() const { return NegateExpr<Derived>(derived()); }
@@ -151,12 +156,12 @@ public:
return SymbolValue<Tag>(val);
}
- Index eval(const SymbolValue<Tag> &values) const { return values.value(); }
+ Index eval_impl(const SymbolValue<Tag> &values) const { return values.value(); }
#if __cplusplus > 201103L
// C++14 versions suitable for multiple symbols
template<typename... Types>
- Index eval(const std::tuple<Types...>& values) const { return std::get<SymbolValue<Tag> >(values).value(); }
+ Index eval_impl(const std::tuple<Types...>& values) const { return std::get<SymbolValue<Tag> >(values).value(); }
#endif
};
@@ -167,7 +172,7 @@ public:
NegateExpr(const Arg0& arg0) : m_arg0(arg0) {}
template<typename T>
- Index eval(const T& values) const { return -m_arg0.eval(values); }
+ Index eval_impl(const T& values) const { return -m_arg0.eval_impl(values); }
protected:
Arg0 m_arg0;
};
@@ -179,7 +184,7 @@ public:
AddExpr(const Arg0& arg0, const Arg1& arg1) : m_arg0(arg0), m_arg1(arg1) {}
template<typename T>
- Index eval(const T& values) const { return m_arg0.eval(values) + m_arg1.eval(values); }
+ Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) + m_arg1.eval_impl(values); }
protected:
Arg0 m_arg0;
Arg1 m_arg1;
@@ -192,7 +197,7 @@ public:
ProductExpr(const Arg0& arg0, const Arg1& arg1) : m_arg0(arg0), m_arg1(arg1) {}
template<typename T>
- Index eval(const T& values) const { return m_arg0.eval(values) * m_arg1.eval(values); }
+ Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) * m_arg1.eval_impl(values); }
protected:
Arg0 m_arg0;
Arg1 m_arg1;
@@ -205,7 +210,7 @@ public:
QuotientExpr(const Arg0& arg0, const Arg1& arg1) : m_arg0(arg0), m_arg1(arg1) {}
template<typename T>
- Index eval(const T& values) const { return m_arg0.eval(values) / m_arg1.eval(values); }
+ Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) / m_arg1.eval_impl(values); }
protected:
Arg0 m_arg0;
Arg1 m_arg1;