20 #ifndef RAJA_pattern_kernel_internal_LoopTypes_HPP
21 #define RAJA_pattern_kernel_internal_LoopTypes_HPP
23 #include "RAJA/config.hpp"
25 #include "camp/camp.hpp"
33 template<
typename SegmentTypes,
typename OffsetTypes>
36 template<
typename... SegmentTypes,
typename... OffsetTypes>
37 struct LoopTypes<camp::list<SegmentTypes...>, camp::list<OffsetTypes...>>
41 LoopTypes<camp::list<SegmentTypes...>, camp::list<OffsetTypes...>>;
43 static constexpr
size_t s_num_segments =
sizeof...(SegmentTypes);
47 static_assert(s_num_segments ==
sizeof...(OffsetTypes),
48 "Number of segments and offsets must match");
54 template<
typename Data>
60 template<
typename Types, camp::
idx_t Segment,
typename T,
typename Seq>
63 template<
typename Types, camp::idx_t Segment,
typename T, camp::idx_t... SEQ>
69 static_assert(std::is_same<camp::at_v<segment_list, Segment>,
void>::value,
70 "Segment was already assigned: Probably looping over same "
71 "segment in loop nest");
75 typename std::conditional<SEQ == Segment,
77 camp::at_v<segment_list, SEQ>>
::type...>,
79 typename std::conditional<SEQ == Segment,
81 camp::at_v<segment_list, SEQ>>
::type...>>;
84 template<
typename Types, camp::
idx_t Segment,
typename T>
89 camp::make_idx_seq_t<Types::s_num_segments>>::type;
91 template<
typename Types, camp::
idx_t Segment,
typename Data>
95 camp::at_v<typename camp::decay<Data>::index_types_t, Segment>>;
Header file for loop kernel internals and helper functions.
setSegmentType< Types, Segment, camp::at_v< typename camp::decay< Data >::index_types_t, Segment > > setSegmentTypeFromData
Definition: LoopTypes.hpp:95
typename SetSegmentTypeHelper< Types, Segment, T, camp::make_idx_seq_t< Types::s_num_segments > >::type setSegmentType
Definition: LoopTypes.hpp:89
typename detail::ListOfNHelper< T, camp::make_idx_seq_t< N > >::type list_of_n
Definition: Template.hpp:69
Definition: AlignedRangeIndexSetBuilders.cpp:35
Definition: LoopTypes.hpp:38
camp::list< SegmentTypes... > segment_types_t
Definition: LoopTypes.hpp:50
camp::list< OffsetTypes... > offset_types_t
Definition: LoopTypes.hpp:51
Definition: LoopTypes.hpp:34
typename Types::segment_types_t segment_list
Definition: LoopTypes.hpp:66
typename Types::offset_types_t offset_list
Definition: LoopTypes.hpp:67
Definition: LoopTypes.hpp:61