23 #include "RAJA/config.hpp"
26 #include <type_traits>
36 inline namespace policy_by_value_interface
55 typename Function = operators::plus<RAJA::detail::ContainerVal<Container>>>
56 RAJA_INLINE concepts::enable_if_t<
57 resources::EventProxy<Res>,
58 type_traits::is_execution_policy<ExecPolicy>,
59 type_traits::is_resource<Res>,
60 std::is_constructible<camp::resources::Resource, Res>,
61 type_traits::is_range<Container>>
65 Function binop = Function {})
70 static_assert(type_traits::is_binary_function<Function, R, R, R>::value,
71 "Function must model BinaryFunction");
72 static_assert(type_traits::is_random_access_range<Container>::value,
73 "Container must model RandomAccessRange");
74 if (begin(c) == end(c))
76 return resources::EventProxy<Res>(r);
86 typename Function = operators::plus<RAJA::detail::ContainerVal<Container>>,
88 RAJA_INLINE concepts::enable_if_t<
89 resources::EventProxy<Res>,
90 type_traits::is_execution_policy<ExecPolicy>,
91 type_traits::is_range<Container>,
93 std::is_constructible<camp::resources::Resource, Container>>>
96 Function binop = Function {})
98 auto r = Res::get_default();
100 std::forward<ExecPolicy>(p), r, std::forward<Container>(c), binop);
115 template<
typename ExecPolicy,
119 typename Function = operators::plus<T>>
120 RAJA_INLINE concepts::enable_if_t<
121 resources::EventProxy<Res>,
122 type_traits::is_execution_policy<ExecPolicy>,
123 type_traits::is_resource<Res>,
124 std::is_constructible<camp::resources::Resource, Res>,
125 type_traits::is_range<Container>>
129 Function binop = Function {},
130 T value = Function::identity())
135 static_assert(type_traits::is_binary_function<Function, R, T, R>::value,
136 "Function must model BinaryFunction");
137 static_assert(type_traits::is_random_access_range<Container>::value,
138 "Container must model RandomAccessRange");
139 if (begin(c) == end(c))
141 return resources::EventProxy<Res>(r);
144 end(c), binop, value);
148 template<
typename ExecPolicy,
151 typename Function = operators::plus<T>,
153 RAJA_INLINE concepts::enable_if_t<
154 resources::EventProxy<Res>,
155 type_traits::is_execution_policy<ExecPolicy>,
156 type_traits::is_range<Container>,
158 std::is_constructible<camp::resources::Resource, Container>>>
161 Function binop = Function {},
162 T value = Function::identity())
164 auto r = Res::get_default();
166 std::forward<ExecPolicy>(p), r, std::forward<Container>(c), binop, value);
185 template<
typename ExecPolicy,
187 typename InContainer,
188 typename OutContainer,
190 operators::plus<RAJA::detail::ContainerVal<InContainer>>>
191 RAJA_INLINE concepts::enable_if_t<
192 resources::EventProxy<Res>,
193 type_traits::is_execution_policy<ExecPolicy>,
194 type_traits::is_resource<Res>,
195 std::is_constructible<camp::resources::Resource, Res>,
196 type_traits::is_range<InContainer>,
197 type_traits::is_range<OutContainer>>
202 Function binop = Function {})
208 static_assert(type_traits::is_binary_function<Function, R, T, R>::value,
209 "Function must model BinaryFunction");
210 static_assert(type_traits::is_random_access_range<InContainer>::value,
211 "InContainer must model RandomAccessRange");
212 static_assert(type_traits::is_random_access_range<OutContainer>::value,
213 "OutContainer must model RandomAccessRange");
214 if (begin(in) == end(in))
216 return resources::EventProxy<Res>(r);
219 end(in), begin(out), binop);
223 template<
typename ExecPolicy,
224 typename InContainer,
225 typename OutContainer,
227 operators::plus<RAJA::detail::ContainerVal<InContainer>>,
229 RAJA_INLINE concepts::enable_if_t<
230 resources::EventProxy<Res>,
231 type_traits::is_execution_policy<ExecPolicy>,
232 type_traits::is_range<InContainer>,
234 std::is_constructible<camp::resources::Resource, InContainer>>,
235 type_traits::is_range<OutContainer>>
239 Function binop = Function {})
241 auto r = Res::get_default();
243 std::forward<ExecPolicy>(p), r, std::forward<InContainer>(in),
244 std::forward<OutContainer>(out), binop);
263 template<
typename ExecPolicy,
265 typename InContainer,
266 typename OutContainer,
268 typename Function = operators::plus<T>>
269 RAJA_INLINE concepts::enable_if_t<
270 resources::EventProxy<Res>,
271 type_traits::is_execution_policy<ExecPolicy>,
272 type_traits::is_resource<Res>,
273 std::is_constructible<camp::resources::Resource, Res>,
274 type_traits::is_range<InContainer>,
275 type_traits::is_range<OutContainer>>
280 Function binop = Function {},
281 T value = Function::identity())
287 static_assert(type_traits::is_binary_function<Function, R, T, U>::value,
288 "Function must model BinaryFunction");
289 static_assert(type_traits::is_random_access_range<InContainer>::value,
290 "InContainer must model RandomAccessRange");
291 static_assert(type_traits::is_random_access_range<OutContainer>::value,
292 "OutContainer must model RandomAccessRange");
293 if (begin(in) == end(in))
295 return resources::EventProxy<Res>(r);
298 end(in), begin(out), binop, value);
302 template<
typename ExecPolicy,
303 typename InContainer,
304 typename OutContainer,
306 typename Function = operators::plus<T>,
308 RAJA_INLINE concepts::enable_if_t<
309 resources::EventProxy<Res>,
310 type_traits::is_execution_policy<ExecPolicy>,
311 type_traits::is_range<InContainer>,
313 std::is_constructible<camp::resources::Resource, InContainer>>,
314 type_traits::is_range<OutContainer>>
318 Function binop = Function {},
319 T value = Function::identity())
321 auto r = Res::get_default();
323 std::forward<ExecPolicy>(p), r, std::forward<InContainer>(in),
324 std::forward<OutContainer>(out), binop, value);
335 template<
typename ExecPolicy,
338 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
339 type_traits::is_execution_policy<ExecPolicy>>
342 Res r = Res::get_default();
343 return ::RAJA::policy_by_value_interface::exclusive_scan<ExecPolicy>(
348 template<
typename ExecPolicy,
typename Res,
typename... Args>
349 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
350 type_traits::is_execution_policy<ExecPolicy>,
351 type_traits::is_resource<Res>>
364 template<
typename ExecPolicy,
367 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
368 type_traits::is_execution_policy<ExecPolicy>>
371 Res r = Res::get_default();
372 return ::RAJA::policy_by_value_interface::inclusive_scan<ExecPolicy>(
377 template<
typename ExecPolicy,
typename Res,
typename... Args>
378 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
379 type_traits::is_execution_policy<ExecPolicy>,
380 type_traits::is_resource<Res>>
393 template<
typename ExecPolicy,
396 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
397 type_traits::is_execution_policy<ExecPolicy>>
400 Res r = Res::get_default();
401 return ::RAJA::policy_by_value_interface::exclusive_scan_inplace<ExecPolicy>(
406 template<
typename ExecPolicy,
typename Res,
typename... Args>
407 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
408 type_traits::is_execution_policy<ExecPolicy>,
409 type_traits::is_resource<Res>>
422 template<
typename ExecPolicy,
425 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
426 type_traits::is_execution_policy<ExecPolicy>>
429 Res r = Res::get_default();
430 return ::RAJA::policy_by_value_interface::inclusive_scan_inplace<ExecPolicy>(
435 template<
typename ExecPolicy,
typename Res,
typename... Args>
436 RAJA_INLINE concepts::enable_if_t<resources::EventProxy<Res>,
437 type_traits::is_execution_policy<ExecPolicy>,
438 type_traits::is_resource<Res>>
Header file for RAJA operator definitions.
Header file for basic RAJA policy mechanics.
Header file for RAJA algorithm definitions.
Header file for RAJA concept definitions.
camp::decay< decltype(*camp::val< camp::iterator_from< Container > >())> ContainerVal
Definition: algorithm.hpp:51
Args args
Definition: WorkRunner.hpp:212
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > inclusive(resources::Host host_res, const Policy &exec, Iter begin, Iter end, OutIter out, BinFn f)
Definition: scan.hpp:144
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > exclusive(resources::Host host_res, const Policy &exec, Iter begin, Iter end, OutIter out, BinFn f, ValueT v)
Definition: scan.hpp:167
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > inclusive_inplace(resources::Host host_res, const Policy &, Iter begin, Iter end, BinFn f)
Definition: scan.hpp:51
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > exclusive_inplace(resources::Host host_res, const Policy &, Iter begin, Iter end, BinFn f, ValueT v)
Definition: scan.hpp:96
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res >, std::is_constructible< camp::resources::Resource, Res >, type_traits::is_range< Container > > inclusive_scan_inplace(ExecPolicy &&p, Res r, Container &&c, Function binop=Function {})
inclusive in-place scan execution pattern
Definition: scan.hpp:62
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res >, std::is_constructible< camp::resources::Resource, Res >, type_traits::is_range< InContainer >, type_traits::is_range< OutContainer > > exclusive_scan(ExecPolicy &&p, Res r, InContainer &&in, OutContainer &&out, Function binop=Function {}, T value=Function::identity())
exclusive scan execution pattern
Definition: scan.hpp:276
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res >, std::is_constructible< camp::resources::Resource, Res >, type_traits::is_range< Container > > exclusive_scan_inplace(ExecPolicy &&p, Res r, Container &&c, Function binop=Function {}, T value=Function::identity())
exclusive in-place scan execution pattern
Definition: scan.hpp:126
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res >, std::is_constructible< camp::resources::Resource, Res >, type_traits::is_range< InContainer >, type_traits::is_range< OutContainer > > inclusive_scan(ExecPolicy &&p, Res r, InContainer &&in, OutContainer &&out, Function binop=Function {})
inclusive scan execution pattern
Definition: scan.hpp:198
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res > > inclusive_scan(Res r, Args &&... args)
Definition: scan.hpp:381
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res > > exclusive_scan_inplace(Res r, Args &&... args)
Definition: scan.hpp:410
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res > > exclusive_scan(Res r, Args &&... args)
Definition: scan.hpp:352
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res > > inclusive_scan_inplace(Res r, Args &&... args)
Definition: scan.hpp:439
Definition: IndexSet.hpp:70
camp::resources::Host type
Definition: resource.hpp:49