20 #ifndef RAJA_foldl_HPP
21 #define RAJA_foldl_HPP
23 #include "RAJA/config.hpp"
28 #include <type_traits>
31 #include "camp/camp.hpp"
44 template<
typename Op,
typename... Rest>
47 template<
typename Op,
typename Arg1>
53 #if RAJA_HAS_CXX17_IS_INVOCABLE
55 template<
typename Op,
typename Arg1,
typename Arg2>
58 using Ret =
typename std::invoke_result<Op, Arg1, Arg2>::type;
66 struct foldl_impl<Op, Arg1, Arg2, Arg3, Rest...>
69 typename foldl_impl<Op,
70 typename std::invoke_result<
72 typename std::invoke_result<Op, Arg1, Arg2>::type,
79 template<
typename Op,
typename Arg1,
typename Arg2>
82 using Ret =
typename std::result_of<Op(Arg1, Arg2)>::type;
94 typename std::result_of<Op(
typename std::result_of<Op(Arg1, Arg2)>::type,
103 template<
typename Op,
typename Arg1>
108 return camp::forward<Arg1>(arg);
111 template<
typename Op,
typename Arg1,
typename Arg2>
117 return camp::forward<Op>(operation)(camp::forward<Arg1>(arg1),
118 camp::forward<Arg2>(arg2));
121 template<
typename Op,
133 return foldl(camp::forward<Op>(operation),
134 camp::forward<Op>(operation)(
135 camp::forward<Op>(operation)(camp::forward<Arg1>(arg1),
136 camp::forward<Arg2>(arg2)),
137 camp::forward<Arg3>(arg3)),
138 camp::forward<Rest>(rest)...);
142 template<
typename Result,
typename... Args>
148 template<
typename Result,
typename... Args>
154 template<
typename Result,
typename... Args>
160 template<
typename Result,
typename... Args>
Header file for common RAJA internal macro definitions.
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
#define RAJA_UNUSED_ARG(x)
Definition: macros.hpp:97
Args args
Definition: WorkRunner.hpp:212
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA_HOST_DEVICE constexpr RAJA_INLINE Result product(Args... args)
Definition: foldl.hpp:149
RAJA_HOST_DEVICE constexpr RAJA_INLINE Result min(Args... args)
Definition: foldl.hpp:161
RAJA_HOST_DEVICE constexpr RAJA_INLINE Result sum(Args... args)
Definition: foldl.hpp:143
RAJA_HOST_DEVICE constexpr RAJA_INLINE auto foldl(Op &&RAJA_UNUSED_ARG(operation), Arg1 &&arg) -> typename detail::foldl_impl< Op, Arg1 >::Ret
Definition: foldl.hpp:104
RAJA_HOST_DEVICE constexpr RAJA_INLINE Result max(Args... args)
Definition: foldl.hpp:155
typename foldl_impl< Op, typename std::result_of< Op(typename std::result_of< Op(Arg1, Arg2)>::type, Arg3)>::type, Rest... >::Ret Ret
Definition: foldl.hpp:96
typename std::result_of< Op(Arg1, Arg2)>::type Ret
Definition: foldl.hpp:82
Arg1 Ret
Definition: foldl.hpp:50
Definition: Operators.hpp:580
Definition: Operators.hpp:559
Definition: Operators.hpp:400
Definition: Operators.hpp:367