24 #include <type_traits>
26 #include "RAJA/config.hpp"
39 template<
typename layout>
45 template<
typename IdxLin,
typename... DimTypes>
51 template<
typename ValueType,
53 typename PointerType = ValueType*>
57 template<
typename ValueType,
typename LayoutType,
typename... IndexTypes>
59 TypedViewBase<ValueType, ValueType*, LayoutType, camp::list<IndexTypes...>>;
61 template<
typename IndexType,
typename ValueType>
68 template<
size_t n_dims,
71 typename... IndexTypes>
74 IndexLayout<n_dims, IndexType, IndexTypes...>>
84 template<
typename Lay,
typename Tup, camp::idx_t... Idxs>
87 camp::idx_seq<Idxs...>)
88 -> decltype(lyout(camp::get<Idxs>(std::forward<Tup>(tup))...))
90 return lyout(camp::get<Idxs>(std::forward<Tup>(tup))...);
94 template<
typename Seq1,
typename Seq2>
97 template<camp::idx_t... Idxs1, camp::idx_t... Idxs2>
98 struct cat_seq<camp::idx_seq<Idxs1...>, camp::idx_seq<Idxs2...>>
100 using type = camp::idx_seq<Idxs1..., Idxs2...>;
103 template<
typename Seq1,
typename Seq2>
107 template<camp::
idx_t Offset,
typename Seq>
110 template<camp::idx_t Offset, camp::idx_t... Idxs>
113 using type = camp::idx_seq<(Idxs + Offset)...>;
116 template<camp::
idx_t Offset,
typename Seq>
121 template<
typename Lay, RAJA::Index_type Nth = 0,
typename Tup>
123 -> decltype(selecttuple<Lay>(
125 std::forward<Tup>(tup),
127 camp::make_idx_seq_t<Nth>,
129 camp::make_idx_seq_t<camp::tuple_size<Tup>::value -
133 return selecttuple<Lay>(
134 lyout, std::forward<Tup>(tup),
137 camp::make_idx_seq_t<camp::tuple_size<Tup>::value -
151 typename PointerType = ValueType**,
152 typename NonConstPointerType = camp::type::ptr::add<
153 camp::type::ptr::add<camp::type::cv::rem<
154 camp::type::ptr::rem<camp::type::ptr::rem<PointerType>
172 template<
typename... Args>
208 template<bool IsConstView = std::is_const<value_type>::value>
210 std::enable_if_t<IsConstView, NonConstView>
const& rhs)
220 template<bool IsConstValue = std::is_const<value_type>::value>
222 std::enable_if_t<IsConstValue, NonConstPointerType> data_ptr)
244 template<
size_t n_dims = layout_type::n_dims,
typename IdxLin = Index_type>
246 MultiView<ValueType, typename add_offset<layout_type>::type, P2Pidx>
249 static_assert(n_dims == layout_type::n_dims,
250 "Dimension mismatch in MultiView shift");
253 shift_layout.shift(
shift);
263 template<
typename... Args>
272 "Negative index while accessing array of pointers.\n");
275 removenth<LayoutType, P2Pidx>(
layout, camp::forward_as_tuple(ar...)));
280 template<
typename ViewType,
typename AtomicPolicy = RAJA::auto_atomic>
297 base_.set_data(data_ptr);
300 template<
typename... ARGS>
311 template<
typename ViewType>
322 ViewType
const& view)
328 base_.set_data(data_ptr);
331 template<
typename... ARGS>
334 return base_.operator()(std::forward<ARGS>(
args)...);
338 template<
typename AtomicPolicy,
typename ViewType>
339 RAJA_HOST_DEVICE RAJA_INLINE constexpr AtomicViewWrapper<ViewType, AtomicPolicy>
355 template<
typename meta_layout>
364 template<
typename T0,
typename T1,
typename... Args>
372 template<std::size_t... stride_order_idx>
375 template<
typename IndexType,
typename T,
typename... Extents>
377 Extents&&... extents)
379 constexpr
int N =
sizeof...(Extents);
382 std::array<RAJA::idx_t, N> {std::forward<Extents>(extents)...},
383 std::array<RAJA::idx_t, N> {stride_order_idx...});
388 return view_t(ptr, custom_layout);
395 template<
typename IndexType,
typename T,
typename... Extents>
397 Extents&&... extents)
399 constexpr
int N =
sizeof...(Extents);
402 return view_t(ptr, std::forward<Extents>(extents)...);
406 template<std::size_t... idx>
408 std::index_sequence<idx...>)
410 return std::array<RAJA::idx_t,
sizeof...(idx)> {
sizeof...(idx) - 1U - idx...};
416 template<
typename IndexType,
typename T,
typename... Extents>
418 Extents&&... extents)
420 constexpr
int N =
sizeof...(Extents);
423 std::array<RAJA::idx_t, N> {std::forward<Extents>(extents)...},
427 return view_t(ptr, reverse_layout);
433 template<
typename meta_layout,
439 Extents&&... extents)
442 ptr, std::forward<Extents>(extents)...);
RAJA header file defining the IndexLayout class and IndexList classes.
RAJA header file defining Layout, a N-dimensional index calculator.
RAJA header file defining Layout, a N-dimensional index calculator with offset indices.
RAJA header file defining a multi-dimensional view class.
Atomic wrapper object.
Definition: atomic.hpp:302
Definition: TypedViewBase.hpp:725
Definition: TypedViewBase.hpp:569
RAJA_HOST_DEVICE void RAJA_ABORT_OR_THROW(const char *str)
Definition: macros.hpp:143
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
RAJA_HOST_DEVICE constexpr RAJA_INLINE auto get_last_index(T last)
Definition: View.hpp:359
Args args
Definition: WorkRunner.hpp:212
RAJA_HOST_DEVICE constexpr RAJA_INLINE auto make_reverse_array(std::index_sequence< idx... >)
Definition: View.hpp:407
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA_HOST_DEVICE constexpr RAJA_INLINE auto make_permuted_view(T *ptr, Extents &&... extents)
Definition: View.hpp:437
RAJA_HOST_DEVICE constexpr RAJA_INLINE View< ValueType, Layout< 1, IndexType, 0 > > make_view(ValueType *ptr)
Definition: View.hpp:63
std::ptrdiff_t Index_type
Definition: types.hpp:226
typename cat_seq< Seq1, Seq2 >::type cat_seq_t
Definition: View.hpp:104
internal::ViewBase< ValueType, PointerType, LayoutType > View
Definition: View.hpp:54
RAJA_HOST_DEVICE constexpr RAJA_INLINE View< ValueType, IndexLayout< n_dims, IndexType, IndexTypes... > > make_index_view(ValueType *ptr, IndexLayout< n_dims, IndexType, IndexTypes... > index_layout)
Definition: View.hpp:75
RAJA_HOST_DEVICE constexpr RAJA_INLINE auto selecttuple(Lay lyout, Tup &&tup, camp::idx_seq< Idxs... >) -> decltype(lyout(camp::get< Idxs >(std::forward< Tup >(tup))...))
Definition: View.hpp:85
RAJA_HOST_DEVICE constexpr RAJA_INLINE auto removenth(Lay lyout, Tup &&tup) -> decltype(selecttuple< Lay >(lyout, std::forward< Tup >(tup), cat_seq_t< camp::make_idx_seq_t< Nth >, offset_seq_t< Nth+1, camp::make_idx_seq_t< camp::tuple_size< Tup >::value - Nth - 1 >> > {}))
Definition: View.hpp:122
constexpr RAJA_HOST_DEVICE RAJA_INLINE std::enable_if< std::is_base_of< IndexValueBase, FROM >::value, typename FROM::value_type >::type stripIndexType(FROM const val)
Function that strips the strongly typed Index<> and returns its underlying value_type value.
Definition: IndexValue.hpp:323
typename offset_seq< Offset, Seq >::type offset_seq_t
Definition: View.hpp:117
RAJA_HOST_DEVICE constexpr RAJA_INLINE AtomicViewWrapper< ViewType, AtomicPolicy > make_atomic_view(ViewType const &view)
Definition: View.hpp:340
constexpr RAJA_INLINE RAJA_HOST_DEVICE auto make_permuted_layout(std::array< IdxLin, Rank > sizes, std::array< camp::idx_t, Rank > permutation) -> Layout< Rank, IdxLin >
Creates a permuted Layout object.
Definition: PermutedLayout.hpp:66
Definition: ListSegment.hpp:416
RAJA header file defining atomic operations.
RAJA_HOST_DEVICE constexpr RAJA_INLINE void set_data(pointer_type data_ptr)
Definition: View.hpp:326
typename base_type::value_type value_type
Definition: View.hpp:316
RAJA_HOST_DEVICE RAJA_INLINE value_type & operator()(ARGS &&... args) const
Definition: View.hpp:332
RAJA_HOST_DEVICE constexpr RAJA_INLINE AtomicViewWrapper(ViewType const &view)
Definition: View.hpp:321
ViewType base_type
Definition: View.hpp:314
base_type base_
Definition: View.hpp:319
typename base_type::pointer_type pointer_type
Definition: View.hpp:315
RAJA::AtomicRef< value_type, AtomicPolicy > atomic_type
Definition: View.hpp:286
base_type base_
Definition: View.hpp:288
typename base_type::value_type value_type
Definition: View.hpp:285
RAJA_HOST_DEVICE RAJA_INLINE atomic_type operator()(ARGS &&... args) const
Definition: View.hpp:301
RAJA_HOST_DEVICE constexpr RAJA_INLINE void set_data(pointer_type data_ptr)
Definition: View.hpp:295
typename base_type::pointer_type pointer_type
Definition: View.hpp:284
ViewType base_type
Definition: View.hpp:283
RAJA_HOST_DEVICE constexpr RAJA_INLINE AtomicViewWrapper(ViewType view)
Definition: View.hpp:290
Definition: IndexLayout.hpp:163
RAJA_HOST_DEVICE constexpr RAJA_INLINE void set_data(pointer_type data_ptr)
Definition: View.hpp:228
RAJA_HOST_DEVICE constexpr RAJA_INLINE void set_layout(layout_type const &ly)
Definition: View.hpp:215
RAJA_HOST_DEVICE RAJA_INLINE value_type & operator()(Args... ar) const
Definition: View.hpp:264
LayoutType layout_type
Definition: View.hpp:161
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::MultiView< ValueType, typename add_offset< layout_type >::type, P2Pidx > shift(const std::array< IdxLin, n_dims > &shift)
Definition: View.hpp:247
PointerType pointer_type
Definition: View.hpp:160
RAJA_HOST_DEVICE constexpr RAJA_INLINE void set_data(std::enable_if_t< IsConstValue, NonConstPointerType > data_ptr)
Definition: View.hpp:221
nc_pointer_type data
Definition: View.hpp:168
layout_type layout
Definition: View.hpp:167
RAJA_HOST_DEVICE constexpr RAJA_INLINE layout_type const & get_layout() const
Definition: View.hpp:233
constexpr RAJA_INLINE MultiView(MultiView &&)=default
RAJA_HOST_DEVICE constexpr RAJA_INLINE MultiView(std::enable_if_t< IsConstView, NonConstView > const &rhs)
Definition: View.hpp:209
constexpr RAJA_INLINE MultiView(MultiView const &)=default
constexpr RAJA_INLINE MultiView & operator=(MultiView &&)=default
RAJA_HOST_DEVICE constexpr RAJA_INLINE MultiView(pointer_type data_ptr, layout_type const &ly)
Definition: View.hpp:179
RAJA_HOST_DEVICE constexpr RAJA_INLINE MultiView(pointer_type data_ptr, Args... dim_sizes)
Definition: View.hpp:173
NonConstPointerType nc_pointer_type
Definition: View.hpp:163
camp::decay< value_type > nc_value_type
Definition: View.hpp:162
ValueType value_type
Definition: View.hpp:159
constexpr RAJA_INLINE MultiView & operator=(MultiView const &)=default
RAJA_HOST_DEVICE constexpr RAJA_INLINE pointer_type get_data() const
Definition: View.hpp:238
Definition: OffsetLayout.hpp:172
Definition: Layout.hpp:329
Definition: OffsetLayout.hpp:193
Definition: OffsetLayout.hpp:188
camp::idx_seq< Idxs1..., Idxs2... > type
Definition: View.hpp:100
Definition: Layout.hpp:46
static RAJA_HOST_DEVICE constexpr RAJA_INLINE auto get(T *ptr, Extents &&... extents)
Definition: View.hpp:417
static RAJA_HOST_DEVICE constexpr RAJA_INLINE auto get(T *ptr, Extents &&... extents)
Definition: View.hpp:396
static RAJA_HOST_DEVICE constexpr RAJA_INLINE auto get(T *ptr, Extents &&... extents)
Definition: View.hpp:376
camp::idx_seq<(Idxs+Offset)... > type
Definition: View.hpp:113
Definition: policy.hpp:127