52 #ifndef AMESOS2_KOKKOS_VIEW_COPY_ASSIGN_HPP 53 #define AMESOS2_KOKKOS_VIEW_COPY_ASSIGN_HPP 58 template<
class dst_t,
class src_t>
59 typename std::enable_if<static_cast<int>(dst_t::Rank) == 1>::type
60 update_dst_size(dst_t & dst,
const src_t & src) {
61 if(dst.extent(0) != src.extent(0)) {
62 dst = dst_t(Kokkos::ViewAllocateWithoutInitializing(
"dst"),
67 template<
class dst_t,
class src_t>
68 typename std::enable_if<static_cast<int>(dst_t::Rank) == 2>::type
69 update_dst_size(dst_t & dst,
const src_t & src) {
70 if(dst.extent(0) != src.extent(0) || dst.extent(1) != src.extent(1)) {
71 dst = dst_t(Kokkos::ViewAllocateWithoutInitializing(
"dst"),
72 src.extent(0), src.extent(1));
83 template<
class dst_t,
class src_t>
84 typename std::enable_if<std::is_same<
typename dst_t::value_type,
85 typename src_t::value_type>::value>::type
86 implement_copy_or_assign_same_mem_check_types(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
100 template<
class dst_t,
class src_t>
101 void deep_copy_only(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
102 update_dst_size(dst, src);
104 Kokkos::deep_copy(dst, src);
109 template<
class dst_t,
class src_t>
110 void deep_copy_only(dst_t & dst,
const src_t & src) {
112 deep_copy_only(
true, dst, src, bAssigned);
123 template<
class dst_t,
class src_t>
124 typename std::enable_if<!std::is_same<
typename dst_t::value_type,
125 typename src_t::value_type>::value>::type
126 implement_copy_or_assign_same_mem_check_types(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
127 update_dst_size(dst, src);
129 Kokkos::deep_copy(dst, src);
138 template<
class dst_t,
class src_t>
139 typename std::enable_if<std::is_same<
typename dst_t::memory_space,
140 typename src_t::memory_space>::value>::type
141 deep_copy_or_assign_view(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
142 implement_copy_or_assign_same_mem_check_types(bInitialize, dst, src, bAssigned);
147 template<
class dst_t,
class src_t>
148 typename std::enable_if<std::is_same<
typename dst_t::memory_space,
149 typename src_t::memory_space>::value>::type
150 deep_copy_or_assign_view(dst_t & dst,
const src_t & src) {
152 implement_copy_or_assign_same_mem_check_types(
true, dst, src, bAssigned);
155 template<
class dst_t,
class src_t>
156 typename std::enable_if<std::is_same<
typename dst_t::value_type,
157 typename src_t::value_type>::value>::type
158 implement_copy_or_assign_diff_mem_check_types(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
159 update_dst_size(dst, src);
161 Kokkos::deep_copy(dst, src);
166 template<
class dst_t,
class src_t>
167 typename std::enable_if<static_cast<int>(dst_t::Rank) == 1>::type
168 implement_copy_or_assign_diff_mem_diff_types_check_dim(dst_t & dst,
const src_t & src) {
169 Kokkos::View<typename dst_t::value_type*, typename src_t::execution_space>
170 intermediate(Kokkos::ViewAllocateWithoutInitializing(
"intermediate"), src.extent(0));
171 Kokkos::deep_copy(intermediate, src);
172 Kokkos::deep_copy(dst, intermediate);
175 template<
class dst_t,
class src_t>
176 typename std::enable_if<static_cast<int>(dst_t::Rank) == 2>::type
177 implement_copy_or_assign_diff_mem_diff_types_check_dim(dst_t & dst,
const src_t & src) {
178 Kokkos::View<typename dst_t::value_type**, Kokkos::LayoutLeft, typename src_t::execution_space>
179 intermediate(Kokkos::ViewAllocateWithoutInitializing(
"intermediate"), src.extent(0), src.extent(1));
180 Kokkos::deep_copy(intermediate, src);
181 Kokkos::deep_copy(dst, intermediate);
184 template<
class dst_t,
class src_t>
185 typename std::enable_if<!std::is_same<
typename dst_t::value_type,
186 typename src_t::value_type>::value>::type
187 implement_copy_or_assign_diff_mem_check_types(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
188 update_dst_size(dst, src);
193 implement_copy_or_assign_diff_mem_diff_types_check_dim(dst, src);
197 template<
class dst_t,
class src_t>
198 typename std::enable_if<!std::is_same<
typename dst_t::memory_space,
199 typename src_t::memory_space>::value>::type
200 deep_copy_or_assign_view(
bool bInitialize, dst_t & dst,
const src_t & src,
bool & bAssigned) {
201 implement_copy_or_assign_diff_mem_check_types(bInitialize, dst, src, bAssigned);
206 template<
class dst_t,
class src_t>
207 typename std::enable_if<!std::is_same<
typename dst_t::memory_space,
208 typename src_t::memory_space>::value>::type
209 deep_copy_or_assign_view(dst_t & dst,
const src_t & src) {
211 implement_copy_or_assign_diff_mem_check_types(
true, dst, src, bAssigned);
216 #endif // AMESOS2_KOKKOS_VIEW_COPY_ASSIGN_HPP Definition: Amesos2_AbstractConcreteMatrixAdapter.hpp:48