1#ifndef TATOOINE_STATIC_MULTIDIM_SIZE_H
2#define TATOOINE_STATIC_MULTIDIM_SIZE_H
11template <std::size_t... Resolution>
13 static std::size_t
constexpr num_dimensions() {
return sizeof...(Resolution); }
25 static constexpr auto end() {
51 auto status_it = std::begin(
m_status);
53 for (; end_it != std::prev(std::end(
resolution)); ++status_it, ++end_it) {
54 auto & i = *status_it;
55 auto & j = *std::next(status_it);
56 auto const&
end = *end_it;
80template <
typename IndexOrder, std::size_t... Resolution>
85 static auto constexpr size() {
return std::array{Resolution...}; }
87 static auto constexpr size(std::size_t
const i) {
return size()[i]; }
91 return ((indices >= 0) && ...) &&
92 ((
static_cast<std::size_t
>(indices) < Resolution) && ...);
96 for (std::size_t i = 0; i < indices.size(); ++i) {
97 if (indices[i] >=
size(i)) {
106 return IndexOrder::plain_index(
size(), indices...);
110 return IndexOrder::plain_index(
size(), indices);
Definition: concepts.h:91
Definition: concepts.h:21
Definition: algorithm.h:6
Definition: static_multidim_size.h:12
array_type m_status
Definition: static_multidim_size.h:17
constexpr auto operator*() const
Definition: static_multidim_size.h:77
static constexpr auto end()
Definition: static_multidim_size.h:25
constexpr auto operator==(static_multidim_iterator const &other) const
Definition: static_multidim_size.h:64
constexpr auto operator++()
Definition: static_multidim_size.h:49
constexpr auto operator!=(static_multidim_iterator const &other) const
Definition: static_multidim_size.h:73
constexpr static_multidim_iterator(static_multidim_iterator const &other)=default
std::array< std::size_t, num_dimensions()> array_type
Definition: static_multidim_size.h:14
static constexpr auto begin()
Definition: static_multidim_size.h:21
constexpr static_multidim_iterator(static_multidim_iterator &&other) noexcept=default
constexpr auto operator=(static_multidim_iterator const &other) -> static_multidim_iterator &=default
~static_multidim_iterator()=default
constexpr static_multidim_iterator(array_type const &status)
Definition: static_multidim_size.h:32
constexpr auto operator=(static_multidim_iterator &&other) noexcept -> static_multidim_iterator &=default
static std::size_t constexpr num_dimensions()
Definition: static_multidim_size.h:13
static constexpr array_type resolution
Definition: static_multidim_size.h:18
Definition: static_multidim_size.h:81
static auto constexpr in_range(integral auto const ... indices)
Definition: static_multidim_size.h:89
auto constexpr operator()(integral auto const ... indices) const
Definition: static_multidim_size.h:113
static auto constexpr num_dimensions()
Definition: static_multidim_size.h:82
static auto constexpr in_range(integral_range auto const &indices)
Definition: static_multidim_size.h:95
auto begin()
Definition: static_multidim_size.h:118
auto end()
Definition: static_multidim_size.h:119
static auto plain_index(integral_range auto const &indices)
Definition: static_multidim_size.h:109
static auto constexpr size()
Definition: static_multidim_size.h:85
static auto constexpr num_components()
Definition: static_multidim_size.h:83
static auto constexpr plain_index(integral auto const ... indices)
Definition: static_multidim_size.h:104
static auto constexpr size(std::size_t const i)
Definition: static_multidim_size.h:87