6 template<
typename T, DeviceType deviceType>
class Array3D;
16 this->resize(nx, ny, nz);
30 inline const std::vector<T>* handle()
const {
return &m_data; }
31 inline std::vector<T>* handle() {
return &m_data; }
33 inline const T* begin()
const {
return m_data.data(); }
35 inline uint nx()
const {
return m_nx; }
36 inline uint ny()
const {
return m_ny; }
37 inline uint nz()
const {
return m_nz; }
39 inline T operator () (
const uint i,
const uint j,
const uint k)
const
41 return m_data[i + j * m_nx + k * m_nxy];
44 inline T& operator () (
const uint i,
const uint j,
const uint k)
46 return m_data[i + j * m_nx + k * m_nxy];
49 inline size_t index(
const uint i,
const uint j,
const uint k)
const
51 return i + j * m_nx + k * m_nxy;
54 inline T operator [] (
const uint id)
const
59 inline T& operator [] (
const uint id)
64 inline size_t size()
const {
return m_data.size(); }
65 inline bool isCPU()
const {
return true; }
66 inline bool isGPU()
const {
return false; }
68 void assign(
const T& val);
72 void assign(
const Array3D<T, DeviceType::GPU>& src);
75 void assign(
const Array3D<T, DeviceType::CPU>& src);
82 std::vector<T> m_data;
89 m_nx = nx; m_ny = ny; m_nz = nz; m_nxy = nx * ny;
91 m_data.resize((
size_t)nx * ny * nz);
97 std::fill(m_data.begin(), m_data.end(), 0);
112 if (m_nx != nx || m_ny != ny || m_nz != nz) {
113 this->resize(nx, ny, nz);
116 m_data.assign(m_data.size(), val);
122 m_data.assign(m_data.size(), val);
128 if (m_nx != src.size() || m_ny != src.size() || m_nz != src.size()) {
129 this->resize(src.nx(), src.ny(), src.nz());
132 m_data.assign(src.m_data.begin(), src.m_data.end());
This is an implementation of AdditiveCCD based on peridyno.
Array3D< T, DeviceType::CPU > CArray3D