| 168 | */ |
| 169 | template <typename M> |
| 170 | void iterate_3D(M &&on_new_row_size) |
| 171 | { |
| 172 | while (_end.z() != _position.z()) |
| 173 | { |
| 174 | iterate_2D_internal(on_new_row_size, _w.x().end() - _w.x().step(), _w.y().end() - _w.y().step()); |
| 175 | _position[2] += _w.z().step(); |
| 176 | _position[1] = _w.y().start(); |
| 177 | _position[0] = _w.x().start(); |
| 178 | } |
| 179 | // Left over: |
| 180 | iterate_2D(on_new_row_size); |
| 181 | } |
| 182 | |
| 183 | /** Iterate over the lowest 2 dimensions of the window. |
| 184 | * |