1#ifndef TATOOINE_DETAIL_RECTILINEAR_GRID_CELL_CONTAINER_H
2#define TATOOINE_DETAIL_RECTILINEAR_GRID_CELL_CONTAINER_H
10template <floating_point_range... Dimensions>
11requires(
sizeof...(Dimensions) > 1)
12class rectilinear_grid;
17template <
typename... Dimensions>
30 static constexpr auto num_dimensions() -> std::size_t {
return sizeof...(Dimensions); }
99 template <
size_t... Is>
100 constexpr auto size(std::index_sequence<Is...> )
const {
101 return ((m_grid.template size<Is>() - 1) * ...);
109 template <invocable<decltype(((void)std::declval<Dimensions>(),
size_t{}))...>
114 std::index_sequence<Ds...> )
const
117 std::forward<Iteration>(iteration), exec,
119 static_cast<size_t>(m_grid.template size<Ds>() - 1)}...);
124 template <invocable<decltype(((void)std::declval<Dimensions>(),
size_t{}))...>
128 return iterate_indices(std::forward<Iteration>(iteration), exec,
129 std::make_index_sequence<num_dimensions()>{});
134 template <invocable<decltype(((void)std::declval<Dimensions>(),
size_t{}))...>
138 std::index_sequence<Ds...> )
const ->
decltype(
auto) {
140 std::forward<Iteration>(iteration), exec,
142 static_cast<size_t>(m_grid.template size<Ds>() - 1)}...);
147 template <invocable<decltype(((void)std::declval<Dimensions>(),
size_t{}))...>
151 return iterate_indices(std::forward<Iteration>(iteration), exec,
152 std::make_index_sequence<num_dimensions()>{});
156 template <invocable<decltype(((void)std::declval<Dimensions>(),
size_t{}))...>
159 return iterate_indices(std::forward<Iteration>(iteration), execution_policy::sequential,
160 std::make_index_sequence<num_dimensions()>{});
174template <dimension... Dimensions>
Definition: rectilinear_grid.h:38
Definition: vtp_writer.h:3
Definition: algorithm.h:6
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148
constexpr auto for_loop(Iteration &&iteration, execution_policy::sequential_t, Ranges(&&... ranges)[2]) -> void
Use this function for creating a sequential nested loop.
Definition: for_loop.h:336
Definition: cell_container.h:18
auto iterate_indices(Iteration &&iteration, execution_policy::sequential_t exec, std::index_sequence< Ds... >) const -> decltype(auto)
Sequential iteration implementation.
Definition: cell_container.h:112
auto iterate_indices(Iteration &&iteration, execution_policy::parallel_t exec) const -> decltype(auto)
Parallel iteration.
Definition: cell_container.h:149
grid_t const & m_grid
Definition: cell_container.h:22
auto iterate_indices(Iteration &&iteration, execution_policy::sequential_t exec) const -> decltype(auto)
Sequential iteration.
Definition: cell_container.h:126
static constexpr auto num_dimensions() -> std::size_t
Definition: cell_container.h:30
auto iterate_indices(Iteration &&iteration) const -> decltype(auto)
Default iteration.
Definition: cell_container.h:158
auto iterate_indices(Iteration &&iteration, execution_policy::parallel_t exec, std::index_sequence< Ds... >) const -> decltype(auto)
Parallel iteration implementation.
Definition: cell_container.h:137
cell_container(grid_t const &g)
Definition: cell_container.h:32
constexpr auto size() const
Definition: cell_container.h:105
typename grid_t::seq_t seq_t
Definition: cell_container.h:29
constexpr auto size(std::index_sequence< Is... >) const
Definition: cell_container.h:100