1#ifndef TATOOINE_DETAIL_STRUCTURED_GRID_VERTEX_CONTAINER_H
2#define TATOOINE_DETAIL_STRUCTURED_GRID_VERTEX_CONTAINER_H
12template <floating_point_range... Dimensions>
13requires(
sizeof...(Dimensions) > 1)
19template <
typename Real, std::size_t NumDimensions,
28 static constexpr auto num_dimensions() -> std::size_t {
return sizeof...(Dimensions); }
38 static_assert(
sizeof...(is) == num_dimensions());
47 static_assert(
sizeof...(is) == num_dimensions());
76 template <std::size_t... Is>
77 constexpr auto size(std::index_sequence<Is...> )
const {
78 return (m_grid.template size<Is>() * ...);
91 std::index_sequence<Ds...>)
const ->
decltype(
auto) {
93 std::forward<Iteration>(iteration), exec,
94 static_cast<std::size_t
>(m_grid.template size<Ds>())...);
104 return iterate_indices(std::forward<Iteration>(iteration), exec,
105 std::make_index_sequence<num_dimensions()>{});
112 return iterate_indices(std::forward<Iteration>(iteration),
113 execution_policy::sequential,
114 std::make_index_sequence<num_dimensions()>{});
117 template <invocable<pos_type> Iteration>
119 return iterate_indices(
120 [
this, iteration = std::forward<Iteration>(iteration)](
121 auto const... is) { iteration(this->at(is...)); },
122 execution_policy::sequential,
123 std::make_index_sequence<num_dimensions()>{});
126 template <invocable<pos_type> Iteration>
130 return iterate_indices(
131 [
this, iteration = std::forward<Iteration>(iteration)](
132 auto const... is) { iteration(this->at(is...)); },
133 exec, std::make_index_sequence<num_dimensions()>{});
137template <dimension... Dimensions>
142template <dimension... Dimensions>
147template <dimension... Dimensions>
Definition: structured_grid.h:16
auto vertex_at(integral auto const ... is) const -> auto const &
Definition: structured_grid.h:84
Definition: concepts.h:21
Definition: concepts.h:121
Definition: vtp_writer.h:3
Definition: algorithm.h:6
auto begin(Range &&range)
Definition: iterator_facade.h:318
auto end(Range &&range)
Definition: iterator_facade.h:322
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
typename grid_type::sequence_type sequence_type
Definition: vertex_container.h:26
Definition: vertex_handle.h:10
Definition: vertex_container.h:21
auto at(integral auto const ... is) const
Definition: vertex_container.h:37
auto operator()(integral auto const ... is) const
Definition: vertex_container.h:46
vertex_container(grid_type const &g)
Definition: vertex_container.h:34
constexpr auto size(std::index_sequence< Is... >) const
Definition: vertex_container.h:77
auto iterate_positions(Iteration &&iteration) const -> decltype(auto)
Definition: vertex_container.h:118
auto iterate_indices(Iteration &&iteration, execution_policy_tag auto const exec) const -> decltype(auto)
Definition: vertex_container.h:101
static constexpr auto num_dimensions() -> std::size_t
Definition: vertex_container.h:28
constexpr auto size() const
Definition: vertex_container.h:82
typename grid_type::vertex_handle handle
Definition: vertex_container.h:25
grid_type const & m_grid
Definition: vertex_container.h:31
typename grid_type::pos_type pos_type
Definition: vertex_container.h:26
auto iterate_indices(Iteration &&iteration, execution_policy_tag auto const exec, std::index_sequence< Ds... >) const -> decltype(auto)
Definition: vertex_container.h:89
typename grid_type::sequence_type sequence_type
Definition: vertex_container.h:27
auto iterate_positions(Iteration &&iteration, execution_policy_tag auto const exec) const -> decltype(auto)
Definition: vertex_container.h:127
auto iterate_indices(Iteration &&iteration) const -> decltype(auto)
Definition: vertex_container.h:111
auto at(handle const &h) const
Definition: vertex_container.h:42
auto operator[](handle const &h) const
Definition: vertex_container.h:44
Definition: index_order.h:17