#include "resource.h" #include namespace utils::cuda { template class Array : public BufferResource { public: Array(size_t n) : CudaBuffer(n * sizeof(T)) {} Array(T *buffer, size_t n) : CudaBuffer(buffer, n * sizeof(T)) {} Array(const std::vector &hostArray) : CudaBuffer(hostArray.size() * sizeof(T)) { cudaMemcpy(getBuffer(), hostArray.data(), size(), cudaMemcpyHostToDevice); } size_t n() const { return size() / sizeof(T); } operator T *() { return (T *)getBuffer(); } Array subArray(size_t offset, size_t n = -1) { if (n == -1) n = this->n() - offset; return Array((T *)*this + offset, n); } }; } // namespace utils::cuda