Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
advance.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/util/move.h"
9
10namespace di::container {
12 template<concepts::Iterator Iter>
13 constexpr void operator()(Iter& iterator, meta::IteratorSSizeType<Iter> n) const {
15 iterator += n;
16 } else {
17 for (; n > 0; --n, ++iterator) {}
19 for (; n < 0; ++n, --iterator) {}
20 }
21 }
22 }
23
24 template<concepts::Iterator Iter, concepts::SentinelFor<Iter> Sent>
25 constexpr void operator()(Iter& iterator, Sent bound) const {
27 iterator = util::move(bound);
29 iterator += (bound - iterator);
30 } else {
31 for (; iterator != bound; ++iterator) {}
32 }
33 }
34
35 template<concepts::Iterator Iter, concepts::SentinelFor<Iter> Sent>
36 constexpr auto operator()(Iter& iterator, meta::IteratorSSizeType<Iter> n, Sent bound) const
40 if (n < 0) {
41 auto bounded_distance = (iterator - bound);
42 auto distance = bounded_distance > -n ? -n : bounded_distance;
43 (*this)(iterator, -distance);
44 return n + distance;
45 }
46 }
47
48 auto bounded_distance = (bound - iterator);
49 auto distance = bounded_distance > n ? n : bounded_distance;
50 (*this)(iterator, distance);
51 return n - bounded_distance;
52 } else {
53 for (; n > 0 && iterator != bound; --n, ++iterator) {}
55 for (; n < 0 && iterator != bound; ++n, --iterator) {}
56 }
57 return n;
58 }
59 }
60};
61
62constexpr inline auto advance = AdvanceFunction {};
63}
64
65namespace di {
67}
Definition operations.h:19
Definition bidirectional_iterator.h:8
Definition random_access_iterator.h:12
Definition sized_sentinel_for.h:9
Definition sequence.h:12
constexpr auto distance
Definition distance.h:44
constexpr auto advance
Definition advance.h:62
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
Definition zstring_parser.h:9
Definition advance.h:11
constexpr auto operator()(Iter &iterator, meta::IteratorSSizeType< Iter > n, Sent bound) const -> meta::IteratorSSizeType< Iter >
Definition advance.h:36
constexpr void operator()(Iter &iterator, meta::IteratorSSizeType< Iter > n) const
Definition advance.h:13
constexpr void operator()(Iter &iterator, Sent bound) const
Definition advance.h:25