63 Grid3D(
unsigned int dim1,
unsigned int dim2,
unsigned int dim3) :
64 dim1_(dim1), dim2_(dim2), dim3_(dim3) {
65 data_.resize(dim1_ * dim2_ * dim3_);
68 Elem& operator()(
unsigned int i,
unsigned int j,
unsigned int k) {
69 int index = isValidGrid(i, j, k);
74 const Elem& operator()(
unsigned int i,
unsigned int j,
75 unsigned int k)
const {
76 int index = isValidGrid(i, j, k);
81 std::vector<Elem> getAllNeighbors(
unsigned int i,
unsigned int j,
83 std::vector<Elem> result;
85 index = isValidGrid(i - 1, j, k);
86 if (index != -1) result.push_back(data_[index]);
88 index = isValidGrid(i + 1, j, k);
89 if (index != -1) result.push_back(data_[index]);
91 index = isValidGrid(i, j - 1, k);
92 if (index != -1) result.push_back(data_[index]);
94 index = isValidGrid(i, j + 1, k);
95 if (index != -1) result.push_back(data_[index]);
97 index = isValidGrid(i, j, k - 1);
98 if (index != -1) result.push_back(data_[index]);
100 index = isValidGrid(i, j, k + 1);
101 if (index != -1) result.push_back(data_[index]);
107 int isValidGrid(
unsigned int i,
unsigned int j,
unsigned int k)
const {
108 unsigned int index = i * dim2_ * dim3_ + j * dim3_ + k;
109 return index < data_.size() ? int(index) : -1;
115 std::vector<Elem> data_;