30#ifndef KOKKOS_VIEW_FAD_FWD_HPP
31#define KOKKOS_VIEW_FAD_FWD_HPP
34#if defined(HAVE_SACADO_KOKKOSCORE)
38#ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
39#define KOKKOS_IMPL_PUBLIC_INCLUDE
40#define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
44#include "Kokkos_Core_fwd.hpp"
45#include "Kokkos_View.hpp"
46#ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
47#undef KOKKOS_IMPL_PUBLIC_INCLUDE
48#undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
54template <
typename view_type>
60#if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
65struct ViewSpecializeSacadoFad;
66struct ViewSpecializeSacadoFadContiguous;
76template<
class DT,
class ... DP,
77 class ST,
class ... SP>
78typename std::enable_if< is_view_fad< Kokkos::View<DT,DP...> >
::value &&
79 is_view_fad< Kokkos::View<ST,SP...> >
::value
81view_copy(
const Kokkos::View<DT,DP...>& dst,
const Kokkos::View<ST,SP...>& src);
83template<
class ExecutionSpace,
84 class DT,
class ... DP,
85 class ST,
class ... SP>
86typename std::enable_if< is_view_fad< Kokkos::View<DT,DP...> >
::value &&
87 is_view_fad< Kokkos::View<ST,SP...> >
::value
89view_copy(
const ExecutionSpace& space,
90 const Kokkos::View<DT,DP...>& dst,
const Kokkos::View<ST,SP...>& src);
92template<
class Space,
class T,
class ... P>
94template<
class Space,
class T,
class ... P>
102template<
class T ,
class ... P >
104typename std::enable_if<
105 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
106 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
107 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
108 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
109 !std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
111 typename Kokkos::View<T,P...>::HostMirror>::type
112create_mirror(
const Kokkos::View<T,P...> & src);
114template<
class T ,
class ... P >
116typename std::enable_if<
117 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
118 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
119 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
120 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
121 std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
123 typename Kokkos::View<T,P...>::HostMirror>::type
124create_mirror(
const Kokkos::View<T,P...> & src);
126template<
class Space,
class T,
class ... P,
127 typename Enable = std::enable_if_t<Kokkos::is_space<Space>::value>>
128typename std::enable_if<
129 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
130 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
131 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
132 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value,
133 typename Impl::MirrorType<Space,
T,P ...>::view_type>::type
134create_mirror(
const Space&,
const Kokkos::View<T,P...> & src);
136template<
class T ,
class ... P >
138typename std::enable_if<
139 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
140 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
141 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
142 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
143 !std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
145 typename Kokkos::View<T,P...>::HostMirror>::type
146create_mirror(Kokkos::Impl::WithoutInitializing_t wi,
147 const Kokkos::View<T,P...> & src);
149template<
class T ,
class ... P >
151typename std::enable_if<
152 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
153 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
154 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
155 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
156 std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
158 typename Kokkos::View<T,P...>::HostMirror>::type
159create_mirror(Kokkos::Impl::WithoutInitializing_t wi,
160 const Kokkos::View<T,P...> & src);
162template<
class Space,
class T,
class ... P,
163 typename Enable = std::enable_if_t<Kokkos::is_space<Space>::value>>
164typename std::enable_if<
165 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
166 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
167 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
168 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ),
169 typename Impl::MirrorType<Space,T,P ...>::view_type>::type
170create_mirror(Kokkos::Impl::WithoutInitializing_t wi,
171 const Space&,
const Kokkos::View<T,P...> & src);
173template <
class Space,
class T,
class... P>
174typename Impl::MirrorViewType<Space,
T, P...>::view_type
175create_mirror_view_and_copy(
176 const Space&,
const Kokkos::View<T, P...>& src,
177 std::string
const& name =
"",
178 typename std::enable_if<
179 ( std::is_same<
typename ViewTraits<T, P...>::specialize,
180 Kokkos::Impl::ViewSpecializeSacadoFad>
::value ||
181 std::is_same<
typename ViewTraits<T,P...>::specialize ,
182 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
183 Impl::MirrorViewType<Space, T, P...>::is_same_memspace>::type* =
186template <
class Space,
class T,
class... P>
187typename Impl::MirrorViewType<Space,
T, P...>::view_type
188create_mirror_view_and_copy(
189 const Space&,
const Kokkos::View<T, P...>& src,
190 std::string
const& name =
"",
191 typename std::enable_if<
192 ( std::is_same<
typename ViewTraits<T, P...>::specialize,
193 Kokkos::Impl::ViewSpecializeSacadoFad>
::value ||
194 std::is_same<
typename ViewTraits<T,P...>::specialize ,
195 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
196 !Impl::MirrorViewType<Space, T, P...>::is_same_memspace>::type* =
201template <
unsigned N,
typename... Args>
202KOKKOS_FUNCTION std::enable_if_t<
203 N ==
View<Args...>::Rank &&
204 (std::is_same<
typename ViewTraits<Args...>::specialize,
205 Kokkos::Impl::ViewSpecializeSacadoFad>
::value ||
206 std::is_same<
typename ViewTraits<Args...>::specialize,
207 Kokkos::Impl::ViewSpecializeSacadoFadContiguous>
::value),
209as_view_of_rank_n(View<Args...> v);
213template <
unsigned N,
typename T,
typename... Args>
215 N !=
View<
T, Args...>::Rank &&
216 (std::is_same<
typename ViewTraits<
T, Args...>::specialize,
217 Kokkos::Impl::ViewSpecializeSacadoFad>
::value ||
218 std::is_same<
typename ViewTraits<
T, Args...>::specialize,
219 Kokkos::Impl::ViewSpecializeSacadoFadContiguous>
::value),
220 View<
typename RankDataType<
typename View<T, Args...>::value_type,
N>::type,
222as_view_of_rank_n(View<T, Args...>);