di 0.1.0
Loading...
Searching...
No Matches
reverse.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container {
8namespace detail {
9 struct ReverseFunction {
10 template<concepts::BidirectionalIterator Iter, concepts::SentinelFor<Iter> Sent>
11 requires(concepts::Permutable<Iter>)
12 constexpr auto operator()(Iter first, Sent sentinel_last) const -> Iter {
13 auto last = container::next(first, sentinel_last);
14 for (auto it = first, jt = last; it != jt && it != --jt; ++it) {
16 }
17 return last;
18 }
19
20 template<concepts::BidirectionalContainer Con>
21 requires(concepts::Permutable<meta::ContainerIterator<Con>>)
22 constexpr auto operator()(Con&& container) const -> meta::BorrowedIterator<Con> {
23 return (*this)(container::begin(container), container::end(container));
24 }
25 };
26}
27
28constexpr inline auto reverse = detail::ReverseFunction {};
29}
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
Definition sequence.h:12
constexpr auto next
Definition next.h:35
constexpr auto reverse
Definition reverse.h:28
constexpr auto iterator_swap
Definition iterator_swap.h:49
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11