27 template<
typename T, DeviceType deviceType>
class Array;
30 class Array<
T, DeviceType::CPU>
39 mData.resize((
size_t)num);
53 inline const T* begin()
const {
return mData.size() == 0 ? nullptr : &mData[0]; }
54 inline T* begin() {
return mData.size() == 0 ? nullptr : &mData[0]; }
56 inline const std::vector<T>* handle()
const {
return &mData; }
57 inline std::vector<T>* handle() {
return &mData; }
59 DeviceType deviceType() {
return DeviceType::CPU; }
61 inline T& operator [] (
unsigned int id)
66 inline const T& operator [] (
unsigned int id)
const
71 inline uint size()
const {
return (
uint)mData.size(); }
72 inline bool isCPU()
const {
return true; }
73 inline bool isGPU()
const {
return false; }
74 inline bool isEmpty()
const {
return mData.empty(); }
76 inline void pushBack(
T ele) { mData.push_back(ele); }
78 void assign(
const T& val);
79 void assign(
uint num,
const T& val);
82 void assign(
const Array<T, DeviceType::GPU>& src);
85 void assign(
const Array<T, DeviceType::CPU>& src);
86 void assign(
const std::vector<T>& src);
88 friend std::ostream& operator<<(std::ostream &out,
const Array<T, DeviceType::CPU>& cArray)
90 for (
uint i = 0; i < cArray.size(); i++)
92 out << i <<
": " << cArray[i] << std::endl;
117 memset((
void*)mData.data(), 0, mData.size()*
sizeof(
T));
123 if (mData.size() != src.size())
124 this->resize(src.size());
126 memcpy(this->begin(), src.begin(), src.size() *
sizeof(
T));
132 if (mData.size() != src.size())
133 this->resize(src.size());
135 mData.assign(src.begin(), src.end());
141 mData.assign(mData.size(), val);
147 mData.assign(num, val);