28 #ifndef FUB_FOR_EACH_HPP
29 #define FUB_FOR_EACH_HPP
73 template <
typename Extents,
typename Function>
76 static_assert(Extents::rank() == 1 || Extents::rank() == 2 ||
77 Extents::rank() == 3 || Extents::rank() == 4);
78 if constexpr (Extents::rank() == 1) {
79 for (
int i = 0; i < mapping.
extents().extent(0); ++i) {
82 }
else if constexpr (Extents::rank() == 2) {
83 for (
int i = 0; i < mapping.
extents().extent(1); ++i) {
84 for (
int j = 0; j < mapping.
extents().extent(0); ++j) {
88 }
else if constexpr (Extents::rank() == 3) {
89 for (
int i = 0; i < mapping.
extents().extent(2); ++i) {
90 for (
int j = 0; j < mapping.
extents().extent(1); ++j) {
91 for (
int k = 0; k < mapping.
extents().extent(0); ++k) {
96 }
else if constexpr (Extents::rank() == 4) {
97 for (
int c = 0; c < mapping.
extents().extent(3); ++c) {
98 for (
int i = 0; i < mapping.
extents().extent(2); ++i) {
99 for (
int j = 0; j < mapping.
extents().extent(1); ++j) {
100 for (
int k = 0; k < mapping.
extents().extent(0); ++k) {
101 function(k, j, i, c);
110 template <
typename Extents,
typename Function>
113 static_assert(Extents::rank() == 1 || Extents::rank() == 2 ||
114 Extents::rank() == 3 || Extents::rank() == 4);
115 if constexpr (Extents::rank() == 1) {
116 for (
int i = 0; i < mapping.
extents().extent(0); ++i) {
119 }
else if constexpr (Extents::rank() == 2) {
121 for (
int i = 0; i < mapping.
extents().extent(1); ++i) {
122 for (
int j = 0; j < mapping.
extents().extent(0); ++j) {
126 }
else if constexpr (Extents::rank() == 3) {
129 for (
int i = 0; i < mapping.
extents().extent(2); ++i) {
130 for (
int j = 0; j < mapping.
extents().extent(1); ++j) {
131 for (
int k = 0; k < mapping.
extents().extent(0); ++k) {
136 }
else if constexpr (Extents::rank() == 4) {
137 for (
int c = 0; c < mapping.
extents().extent(3); ++c) {
138 for (
int i = 0; i < mapping.
extents().extent(2); ++i) {
139 for (
int j = 0; j < mapping.
extents().extent(1); ++j) {
140 for (
int k = 0; k < mapping.
extents().extent(0); ++k) {
141 function(k, j, i, c);
151 template <
int Rank,
typename Function>
153 static_assert(Rank == 1 || Rank == 2 || Rank == 3 || Rank == 4);
154 if constexpr (Rank == 1) {
155 for (std::ptrdiff_t i = box.
lower[0]; i < box.
upper[0]; ++i) {
158 }
else if constexpr (Rank == 2) {
159 for (std::ptrdiff_t i = box.
lower[1]; i < box.
upper[1]; ++i) {
160 for (std::ptrdiff_t j = box.
lower[0]; j < box.
upper[0]; ++j) {
164 }
else if constexpr (Rank == 3) {
165 for (std::ptrdiff_t i = box.
lower[2]; i < box.
upper[2]; ++i) {
166 for (std::ptrdiff_t j = box.
lower[1]; j < box.
upper[1]; ++j) {
167 for (std::ptrdiff_t k = box.
lower[0]; k < box.
upper[0]; ++k) {
172 }
else if constexpr (Rank == 4) {
173 for (std::ptrdiff_t c = box.
lower[3]; c < box.
upper[3]; ++c) {
174 for (std::ptrdiff_t i = box.
lower[2]; i < box.
upper[2]; ++i) {
175 for (std::ptrdiff_t j = box.
lower[1]; j < box.
upper[1]; ++j) {
176 for (std::ptrdiff_t k = box.
lower[0]; k < box.
upper[0]; ++k) {
177 function(k, j, i, c);
#define FUB_ASSERT(x)
Definition: assert.hpp:39
This mapping does row first indexing (as in Fortran).
Definition: mdspan.hpp:302
constexpr const Extents & extents() const noexcept
Definition: mdspan.hpp:325
Definition: mdspan.hpp:473
std::ptrdiff_t stride(size_t rank) const noexcept
Definition: mdspan.hpp:534
constexpr const Extents & extents() const noexcept
Definition: mdspan.hpp:496
Function ForEachIndex(const layout_left::mapping< Extents > &mapping, Function function)
Iterate through the multi-dimensional index space descibed by mapping and invoke function for each su...
Definition: ForEach.hpp:74
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
Definition: PatchDataView.hpp:56
Index< Rank > lower
Definition: PatchDataView.hpp:57
Index< Rank > upper
Definition: PatchDataView.hpp:59