11 #ifndef CUBBYFLOW_ARRAY_UTILS_IMPL_HPP 12 #define CUBBYFLOW_ARRAY_UTILS_IMPL_HPP 18 template <
typename T,
size_t N>
22 ForEachIndex(begin, end, [&](
auto... idx) { a(idx...) = val; });
25 template <
typename T,
size_t N>
37 template <
typename T,
typename U,
size_t N>
41 ForEachIndex(begin, end, [&](
auto... idx) { dst(idx...) = src(idx...); });
44 template <
typename T,
typename U,
size_t N>
50 template <
typename T,
typename U>
56 template <
typename T,
typename U>
62 assert(size == valid.
Size());
63 assert(size == output.
Size());
69 valid0(i, j) = valid(i, j);
70 output(i, j) = input(i, j);
73 for (
unsigned int iter = 0; iter < numberOfIterations; ++iter)
79 unsigned int count = 0;
81 if (i + 1 < size.x && valid0(i + 1, j))
83 sum += output(i + 1, j);
87 if (i > 0 && valid0(i - 1, j))
89 sum += output(i - 1, j);
93 if (j + 1 < size.y && valid0(i, j + 1))
95 sum += output(i, j + 1);
99 if (j > 0 && valid0(i, j - 1))
101 sum += output(i, j - 1);
123 template <
typename T,
typename U>
129 assert(size == valid.
Size());
130 assert(size == output.
Size());
136 valid0(i, j, k) = valid(i, j, k);
137 output(i, j, k) = input(i, j, k);
140 for (
unsigned int iter = 0; iter < numberOfIterations; ++iter)
142 ForEachIndex(valid0.Size(), [&](
size_t i,
size_t j,
size_t k) {
143 if (!valid0(i, j, k))
146 unsigned int count = 0;
148 if (i + 1 < size.x && valid0(i + 1, j, k))
150 sum += output(i + 1, j, k);
154 if (i > 0 && valid0(i - 1, j, k))
156 sum += output(i - 1, j, k);
160 if (j + 1 < size.y && valid0(i, j + 1, k))
162 sum += output(i, j + 1, k);
166 if (j > 0 && valid0(i, j - 1, k))
168 sum += output(i, j - 1, k);
172 if (k + 1 < size.z && valid0(i, j, k + 1))
174 sum += output(i, j, k + 1);
178 if (k > 0 && valid0(i, j, k - 1))
180 sum += output(i, j, k - 1);
void ExtrapolateToRegion(ArrayView2< T > input, ArrayView2< char > valid, unsigned int numberOfIterations, ArrayView2< U > output)
Extrapolates 2-D input data from 'valid' (1) to 'invalid' (0) region.
Definition: ArrayUtils-Impl.hpp:57
void Copy(ArrayView< T, N > src, const Vector< size_t, N > &begin, const Vector< size_t, N > &end, ArrayView< U, N > dst)
Definition: ArrayUtils-Impl.hpp:38
Definition: Matrix.hpp:27
Definition: pybind11Utils.hpp:20
void Fill(ArrayView< T, N > a, const Vector< size_t, N > &begin, const Vector< size_t, N > &end, const T &val)
Definition: ArrayUtils-Impl.hpp:19
Definition: Array-Impl.hpp:19
void ParallelForEachIndex(const Vector< IndexType, N > &begin, const Vector< IndexType, N > &end, const Func &func, ExecutionPolicy policy)
Definition: IterationUtils-Impl.hpp:98
Generic N-dimensional array class interface.
Definition: Array.hpp:32
void ForEachIndex(const Vector< IndexType, N > &begin, const Vector< IndexType, N > &end, const Func &func)
Definition: IterationUtils-Impl.hpp:51
const Vector< size_t, N > & Size() const
Definition: ArrayBase-Impl.hpp:51
T value
Definition: TypeHelpers.hpp:20