11#ifndef CUBBYFLOW_CUDA_ARRAY_VIEW_IMPL_HPP
12#define CUBBYFLOW_CUDA_ARRAY_VIEW_IMPL_HPP
14#ifdef CUBBYFLOW_USE_CUDA
18template <
typename T,
size_t N>
19CUDAArrayView<T, N>::CUDAArrayView() : Base()
24template <
typename T,
size_t N>
25CUDAArrayView<T, N>::CUDAArrayView(T* ptr,
const CUDAStdArray<size_t, N>& size)
28 Base::SetPtrAndSize(ptr, size);
31template <
typename T,
size_t N>
33CUDAArrayView<T, N>::CUDAArrayView(
34 typename std::enable_if<(M == 1), T>::type* ptr,
size_t size)
35 : CUDAArrayView(ptr, CUDAStdArray<size_t, N>{ size })
40template <
typename T,
size_t N>
41CUDAArrayView<T, N>::CUDAArrayView(CUDAArray<T, N>& other) : CUDAArrayView{}
46template <
typename T,
size_t N>
47CUDAArrayView<T, N>::CUDAArrayView(
const CUDAArrayView& other)
52template <
typename T,
size_t N>
53CUDAArrayView<T, N>::CUDAArrayView(CUDAArrayView&& other) noexcept
56 *
this = std::move(other);
59template <
typename T,
size_t N>
60CUDAArrayView<T, N>& CUDAArrayView<T, N>::operator=(
const CUDAArrayView& other)
66template <
typename T,
size_t N>
67CUDAArrayView<T, N>& CUDAArrayView<T, N>::operator=(
68 CUDAArrayView&& other)
noexcept
70 Base::SetPtrAndSize(other.data(), other.Size());
71 other.SetPtrAndSize(
nullptr, CUDAStdArray<size_t, N>{});
75template <
typename T,
size_t N>
76void CUDAArrayView<T, N>::Set(CUDAArray<T, N>& other)
78 Base::SetPtrAndSize(other.data(), other.Size());
81template <
typename T,
size_t N>
82void CUDAArrayView<T, N>::Set(
const CUDAArrayView& other)
84 Base::SetPtrAndSize(
const_cast<T*
>(other.data()), other.Size());
87template <
typename T,
size_t N>
88void CUDAArrayView<T, N>::Fill(
const T& val)
90 CUDAFill(data(), val);
93template <
typename T,
size_t N>
94CUDAArrayView<const T, N>::CUDAArrayView() : Base()
99template <
typename T,
size_t N>
100CUDAArrayView<const T, N>::CUDAArrayView(
const T* ptr,
101 const CUDAStdArray<size_t, N>& size)
104 Base::SetPtrAndSize(MemoryHandle(ptr), size);
107template <
typename T,
size_t N>
109CUDAArrayView<const T, N>::CUDAArrayView(
110 const typename std::enable_if<(M == 1), T>::type* ptr,
size_t size)
111 : CUDAArrayView(ptr, CUDAStdArray<size_t, N>{ size })
116template <
typename T,
size_t N>
117CUDAArrayView<const T, N>::CUDAArrayView(
const CUDAArray<T, N>& other)
123template <
typename T,
size_t N>
124CUDAArrayView<const T, N>::CUDAArrayView(
const CUDAArrayView<T, N>& other)
129template <
typename T,
size_t N>
130CUDAArrayView<const T, N>::CUDAArrayView(
const CUDAArrayView& other)
135template <
typename T,
size_t N>
136CUDAArrayView<const T, N>::CUDAArrayView(CUDAArrayView&& other) noexcept
139 *
this = std::move(other);
142template <
typename T,
size_t N>
143CUDAArrayView<const T, N>& CUDAArrayView<const T, N>::operator=(
144 const CUDAArrayView<T, N>& other)
150template <
typename T,
size_t N>
151CUDAArrayView<const T, N>& CUDAArrayView<const T, N>::operator=(
152 const CUDAArrayView& other)
158template <
typename T,
size_t N>
159CUDAArrayView<const T, N>& CUDAArrayView<const T, N>::operator=(
160 CUDAArrayView&& other)
noexcept
162 Base::SetPtrAndSize(other.data(), other.Size());
163 other.SetPtrAndSize(
nullptr, CUDAStdArray<size_t, N>{});
167template <
typename T,
size_t N>
168void CUDAArrayView<const T, N>::Set(
const CUDAArray<T, N>& other)
170 Base::SetPtrAndSize(other.data(), other.Size());
173template <
typename T,
size_t N>
174void CUDAArrayView<const T, N>::Set(
const CUDAArrayView<T, N>& other)
176 Base::SetPtrAndSize(other.data(), other.Size());
179template <
typename T,
size_t N>
180void CUDAArrayView<const T, N>::Set(
const CUDAArrayView& other)
182 Base::SetPtrAndSize(other.data(), other.Size());
Definition pybind11Utils.hpp:21