1#ifndef TATOOINE_MULTIDIM_H
2#define TATOOINE_MULTIDIM_H
13 std::vector<std::pair<std::size_t, std::size_t>>
m_ranges;
35 ++status_it, ++range_it) {
36 if (range_it->second <= *status_it) {
63 std::vector<std::pair<std::size_t, std::size_t>>
ranges)
67 std::vector<std::pair<std::size_t, std::size_t>>&&
ranges)
71 :
m_ranges(res.
size(), std::make_pair<std::size_t, std::size_t>(0, 0)) {
72 for (std::size_t i = 0; i < res.size(); ++i) {
77 template <std::
size_t N>
79 std::array<std::pair<std::size_t, std::size_t>, N>
const&
ranges)
82 template <std::
size_t N>
84 :
m_ranges(N, std::make_pair<std::size_t, std::size_t>(0, 0)) {
85 for (std::size_t i = 0; i < N; ++i) {
93 static_cast<std::size_t>(
ranges.second))...} {}
99 static_cast<std::size_t>(
ranges[1]))...} {}
103 :
m_ranges{std::make_pair(static_cast<std::size_t>(0),
104 static_cast<std::size_t>(res))...} {}
112 -> std::vector<std::pair<std::size_t, std::size_t>>& {
116 -> std::vector<std::pair<std::
size_t, std::
size_t>> const& {
125 std::vector<std::size_t> v(
m_ranges.size());
127 return iterator{*
this, std::move(v)};
Definition: concepts.h:21
Definition: algorithm.h:6
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148
auto prev(Iter iter)
Definition: iterator_facade.h:343
Definition: multidim.h:14
void operator++()
Definition: multidim.h:30
iterator(dynamic_multidim const &c, std::vector< std::size_t > status)
Definition: multidim.h:19
iterator(iterator const &other)=default
auto operator*() const -> auto const &
Definition: multidim.h:57
auto operator==(iterator const &other) const
Definition: multidim.h:43
iterator(iterator &&other)=default
std::vector< std::size_t > m_status
Definition: multidim.h:17
dynamic_multidim const * m_cont
Definition: multidim.h:16
auto operator=(iterator const &other) -> iterator &=default
auto operator!=(iterator const &other) const
Definition: multidim.h:55
auto operator=(iterator &&other) -> iterator &=default
Definition: multidim.h:11
auto ranges() -> std::vector< std::pair< std::size_t, std::size_t > > &
Definition: multidim.h:111
auto end()
Definition: multidim.h:124
auto operator[](std::size_t i) const -> auto const &
Definition: multidim.h:108
constexpr dynamic_multidim(std::pair< Ts, Ts > const &... ranges)
Definition: multidim.h:91
dynamic_multidim(std::vector< std::pair< std::size_t, std::size_t > > ranges)
Definition: multidim.h:62
auto num_dimensions() const -> std::size_t
Definition: multidim.h:130
std::vector< std::pair< std::size_t, std::size_t > > m_ranges
Definition: multidim.h:13
auto ranges() const -> std::vector< std::pair< std::size_t, std::size_t > > const &
Definition: multidim.h:115
constexpr dynamic_multidim(Ts const (&... ranges)[2])
Definition: multidim.h:97
constexpr dynamic_multidim(std::array< std::size_t, N > const &res)
Definition: multidim.h:83
constexpr dynamic_multidim(integral auto const ... res)
Definition: multidim.h:102
dynamic_multidim(std::array< std::pair< std::size_t, std::size_t >, N > const &ranges)
Definition: multidim.h:78
dynamic_multidim(std::vector< std::pair< std::size_t, std::size_t > > &&ranges)
Definition: multidim.h:66
auto begin()
Definition: multidim.h:120
auto operator[](std::size_t i) -> auto &
Definition: multidim.h:107
dynamic_multidim(std::vector< std::size_t > const &res)
Definition: multidim.h:70