ls1-MarDyn
ls1-MarDyn molecular dynamics code
Array2D.h
1
8#ifndef ARRAY2D_H_
9#define ARRAY2D_H_
10
11#include <vector>
12#include "utils/mardyn_assert.h"
13
14template<class T>
15class Array2D: private std::vector<T> {
16public:
18
22 Array2D(std::size_t dim0 = 0, std::size_t dim1 = 0) :
23 std::vector<T>(dim0 * dim1) {
24 mardyn_assert(this->size() == dim0 * dim1);
25 m_dim[0] = dim0;
26 m_dim[1] = dim1;
27 }
28
30
32 std::size_t dim0() const {
33 return m_dim[0];
34 }
35
37
39 std::size_t dim1() const {
40 return m_dim[1];
41 }
42
44
47 std::size_t dim(unsigned char d) const {
48 mardyn_assert(d < 3);
49 return m_dim[d];
50 }
51
53
57 void redim(std::size_t dim0, std::size_t dim1) {
58 this->resize(dim0 * dim1);
59 mardyn_assert(this->size() == dim0 * dim1);
60 m_dim[0] = dim0;
61 m_dim[1] = dim1;
62 }
63
65
69 T& operator()(std::size_t i0, std::size_t i1) {
70 return (*this)[indices2hash(i0, i1)];
71 }
72
74
78 std::size_t indices2hash(std::size_t i0, std::size_t i1) const {
79 mardyn_assert(i0 < dim0());
80 mardyn_assert(i1 < dim1());
81
82 //return i0*m_dim[1]+i1; // "column-order"
83 return i1 * m_dim[0] + i0; // "row-order"
84 }
85
87
92 void hash2indices(std::size_t h, std::size_t& i0, std::size_t& i1) const {
93 mardyn_assert(h < this->size());
94
95 // "column-order"
96 //i1=h%m_dim[1];
97 //i0=h/m_dim[1];
98 // "row-order"
99 i0 = h % m_dim[0];
100 i1 = h / m_dim[0];
101 }
102
103protected:
104 std::size_t m_dim[2];
105};
106#endif /*ARRAY2D_H_*/
Definition: Array2D.h:15
void redim(std::size_t dim0, std::size_t dim1)
change dimensions
Definition: Array2D.h:57
void hash2indices(std::size_t h, std::size_t &i0, std::size_t &i1) const
Convert hash value to indices.
Definition: Array2D.h:92
std::size_t dim1() const
get dimension for second index
Definition: Array2D.h:39
T & operator()(std::size_t i0, std::size_t i1)
access element
Definition: Array2D.h:69
std::size_t indices2hash(std::size_t i0, std::size_t i1) const
Convert cell coordinates to index/hash value.
Definition: Array2D.h:78
Array2D(std::size_t dim0=0, std::size_t dim1=0)
Constructor.
Definition: Array2D.h:22
std::size_t dim(unsigned char d) const
get dimension
Definition: Array2D.h:47
std::size_t dim0() const
get dimension for first index
Definition: Array2D.h:32