|
Go to the documentation of this file.
28#define SUM(...) (get_sum(__VA_ARGS__)(__VA_ARGS__))
30#define get_sum(...) get_sum_macro(__VA_ARGS__, sum_user_t, sum_ptrdiff_t,)
32#define get_sum_macro(_1, _2, _3, _4, _5, name, ...) name
34#define sum_ptrdiff_t(idx, ini, fin, expr) \
35 sum<std::ptrdiff_t>((ini), (fin), [&](std::ptrdiff_t (idx)) { return (expr); })
37#define sum_user_t(type, idx, ini, fin, expr) \
38 sum<type>((ini), (fin), [&](type (idx)) { return (expr); })
44 std::is_base_of<Eigen::EigenBase<T>, T> ::value;
47template< typename Idx, typename Function, bool isEigenType>
49 static auto eval(Idx i, Function f) -> decltype( f(i)) {
54template< typename Idx, typename Function>
56 static auto eval(Idx i, Function f) ->
57 typename std::remove_reference< decltype( f(i).eval())>::type
63template< typename Idx, typename Function>
74template< typename T, bool isEigenType>
90template< class Idx, class Function>
91auto sum(Idx ini, Idx fin, Function f) -> decltype(EvalEigenXpr<Idx>(ini, f))
93 using Evaled = decltype(EvalEigenXpr<Idx>(ini, f));
94 using Acc = typename std::remove_cv<Evaled>::type;
96 for (Idx i = ini; i <= fin; i++) s += f(i);
auto EvalEigenXpr(Idx i, Function f) -> decltype(EvalEigenXprImpl< Idx, Function, is_eigen_type< decltype(f(i))>::value >::eval(i, f))
std::complex< double > f(double tau) noexcept
auto sum(Idx ini, Idx fin, Function f) -> decltype(EvalEigenXpr< Idx >(ini, f))
static auto eval(Idx i, Function f) -> typename std::remove_reference< decltype(f(i).eval())>::type
static auto eval(Idx i, Function f) -> decltype(f(i))
static constexpr auto value
|