diff options
author | Gael Guennebaud <g.gael@free.fr> | 2017-01-18 23:16:32 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2017-01-18 23:16:32 +0100 |
commit | f3ccbe0419cd86feb1c5f5ec624e65a8e770859a (patch) | |
tree | 946eab0d623064699c53072e1a0e0ab4b94e0d67 /Eigen/src/Core/util/SymbolicIndex.h | |
parent | 15471432fe809f47e1d4986e9d81547a949e3e07 (diff) |
Add a Symbolic::FixedExpr helper expression to make sure the compiler fully optimize the usage of last and end.
Diffstat (limited to 'Eigen/src/Core/util/SymbolicIndex.h')
-rw-r--r-- | Eigen/src/Core/util/SymbolicIndex.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Eigen/src/Core/util/SymbolicIndex.h b/Eigen/src/Core/util/SymbolicIndex.h index beb9d4c13..cee5d908a 100644 --- a/Eigen/src/Core/util/SymbolicIndex.h +++ b/Eigen/src/Core/util/SymbolicIndex.h @@ -124,6 +124,17 @@ struct is_symbolic { enum { value = internal::is_convertible<T,BaseExpr<T> >::value }; }; +// Simple wrapper around a compile-time value, +// It is similar to ValueExpr(N) but this version helps the compiler to generate better code. +template<int N> +class FixedExpr : public BaseExpr<FixedExpr<N> > { +public: + FixedExpr() {} + template<typename T> + Index eval_impl(const T&) const { return N; } +}; + + /** Represents the actual value of a symbol identified by its tag * * It is the return type of SymbolValue::operator=, and most of the time this is only way it is used. |