#pragma once #include #include #include #include #include template class Vector_h; template class Vector_d; // host vector template class Vector_h : public std::vector { public: // Constructors Vector_h() {} inline Vector_h(const int N) : std::vector(N) {} inline Vector_h(const double N) : std::vector(N) {} inline Vector_h(const int N, T v) : std::vector(N, v) {} inline Vector_h(const Vector_h &a) : std::vector(a) {} inline Vector_h(const Vector_d &a) : std::vector(a) {} template< typename OtherVector > inline void copy( const OtherVector &a ) { this->assign( a.begin( ), a.end( ) ); } inline Vector_h& operator=(const Vector_h &a) { copy(a); return *this; } inline Vector_h& operator=(const Vector_d &a) { copy(a); return *this; } inline T* raw() { if (bytes() > 0) return dpct::get_raw_pointer(this->data()); else return 0; } inline const T* raw() const { if (bytes() > 0) return dpct::get_raw_pointer(this->data()); else return 0; } inline size_t bytes() const { return this->size()*sizeof(T); } }; // device vector template class Vector_d : public dpct::device_vector { public: Vector_d() {} inline Vector_d(int N) : dpct::device_vector(N) {} inline Vector_d(int N, T v) : dpct::device_vector(N, v) {} inline Vector_d(const Vector_d &a) : dpct::device_vector(a) {} inline Vector_d(const Vector_h &a) : dpct::device_vector(a) {} template< typename OtherVector > inline void copy( const OtherVector &a ) { this->assign( a.begin( ), a.end( ) ); } inline Vector_d& operator=(const Vector_d &a) { copy(a); return *this; } inline Vector_d& operator=(const Vector_h &a) { copy(a); return *this; } inline T* raw() { if (bytes() > 0) return dpct::get_raw_pointer(this->data()); else return 0; } inline const T* raw() const { if (bytes() > 0) return dpct::get_raw_pointer(this->data()); else return 0; } inline size_t bytes() const { return this->size()*sizeof(T); } };