1#ifndef TATOOINE_DYNAMIC_MULTIDIM_SIZE_H
2#define TATOOINE_DYNAMIC_MULTIDIM_SIZE_H
15template <
typename IndexOrder>
25 std::vector<std::size_t>
m_size = {};
43 template <
typename OtherIndexing>
48 template <
typename OtherIndexing>
52 template <
typename OtherIndexing>
58 template <
typename OtherIndexing>
61 m_size = std::move(other.m_size);
76 template <
typename OtherIndexing>
89 template <
typename OtherIndexing>
107 [[nodiscard]]
auto size() const -> auto const& {
return m_size; }
113 std::multiplies<std::size_t>{});
141 for (std::size_t i = 0; i <
indices.size(); ++i) {
162 return IndexOrder::multi_index(
m_size, gi);
188 ++status_it, ++size_it) {
189 if (*size_it <= *status_it) {
191 ++(*
next(status_it));
222 v.back() =
size().back();
242template <
typename IndexOrder>
245template <
typename IndexOrder>
248template <
typename... Resolution>
Definition: dynamic_multidim_size.h:16
dynamic_multidim_size(dynamic_multidim_size< OtherIndexing > const &other)
Definition: dynamic_multidim_size.h:44
dynamic_multidim_size(dynamic_multidim_size< OtherIndexing > &&other)
Definition: dynamic_multidim_size.h:49
dynamic_multidim_size(dynamic_multidim_size const &other)=default
dynamic_multidim_size(integral_range auto const &size)
Definition: dynamic_multidim_size.h:71
auto constexpr plain_index(integral auto const ... indices) const
Definition: dynamic_multidim_size.h:149
auto constexpr in_range(integral auto const ... indices) const
Definition: dynamic_multidim_size.h:130
auto size(std::size_t const i) const
Definition: dynamic_multidim_size.h:109
auto begin_indices() const
Definition: dynamic_multidim_size.h:215
dynamic_multidim_size(std::vector< std::size_t > &&size)
Definition: dynamic_multidim_size.h:68
~dynamic_multidim_size()=default
dynamic_multidim_size()=default
IndexOrder index_order_type
Definition: dynamic_multidim_size.h:19
auto constexpr multi_index(std::size_t const gi) const
Definition: dynamic_multidim_size.h:161
std::vector< std::size_t > m_size
Definition: dynamic_multidim_size.h:25
dynamic_multidim_size(dynamic_multidim_size &&other) noexcept=default
auto operator=(dynamic_multidim_size< OtherIndexing > const &other) -> dynamic_multidim_size &
Definition: dynamic_multidim_size.h:53
auto indices() const
Definition: dynamic_multidim_size.h:236
auto operator!=(dynamic_multidim_size< OtherIndexing > const &other) const
Definition: dynamic_multidim_size.h:90
auto resize(integral_range auto const &size) -> void
Definition: dynamic_multidim_size.h:120
auto size() const -> auto const &
Definition: dynamic_multidim_size.h:107
auto operator=(dynamic_multidim_size< OtherIndexing > &&other) -> dynamic_multidim_size &
Definition: dynamic_multidim_size.h:59
auto constexpr plain_index(integral_range auto const &indices) const
Definition: dynamic_multidim_size.h:155
auto num_dimensions() const
Definition: dynamic_multidim_size.h:105
auto operator==(dynamic_multidim_size< OtherIndexing > const &other) const
Definition: dynamic_multidim_size.h:77
auto resize(std::vector< std::size_t > const &size) -> void
Definition: dynamic_multidim_size.h:128
auto resize(integral auto const ... size) -> void
Definition: dynamic_multidim_size.h:116
auto constexpr in_range(integral_range auto const &indices) const
Definition: dynamic_multidim_size.h:137
auto num_components() const
Definition: dynamic_multidim_size.h:111
dynamic_multidim_size(integral auto const ... size)
Definition: dynamic_multidim_size.h:65
auto end_indices() const
Definition: dynamic_multidim_size.h:220
auto resize(std::vector< std::size_t > &&size) -> void
Definition: dynamic_multidim_size.h:124
auto operator=(dynamic_multidim_size const &other) -> dynamic_multidim_size &=default
Definition: concepts.h:91
Definition: concepts.h:21
Definition: algorithm.h:6
auto begin(Range &&range)
Definition: iterator_facade.h:318
auto end(Range &&range)
Definition: iterator_facade.h:322
auto next(Iter iter)
Definition: iterator_facade.h:325
auto prev(Iter iter)
Definition: iterator_facade.h:343
Definition: dynamic_multidim_size.h:226
index_range(this_type const *multidim_size)
Definition: dynamic_multidim_size.h:231
this_type const * m_multidim_size
Definition: dynamic_multidim_size.h:228
auto begin() const
Definition: dynamic_multidim_size.h:233
auto end() const
Definition: dynamic_multidim_size.h:234
Definition: dynamic_multidim_size.h:165
indices_iterator(indices_iterator const &other)=default
std::vector< std::size_t > m_status
Definition: dynamic_multidim_size.h:168
auto operator==(indices_iterator const &other) const
Definition: dynamic_multidim_size.h:196
this_type const * m_multidim_size
Definition: dynamic_multidim_size.h:167
indices_iterator(indices_iterator &&other) noexcept=default
indices_iterator(this_type const &c, std::vector< std::size_t > status)
Definition: dynamic_multidim_size.h:170
auto operator!=(indices_iterator const &other) const
Definition: dynamic_multidim_size.h:208
auto operator=(indices_iterator const &other) -> indices_iterator &=default
~indices_iterator()=default
auto operator++()
Definition: dynamic_multidim_size.h:183
auto operator*() const -> auto const &
Definition: dynamic_multidim_size.h:212
Definition: index_order.h:17