Iros
Loading...
Searching...
No Matches
reverse.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/concepts/prelude.h
"
4
#include "
di/container/iterator/next.h
"
5
#include "
di/container/meta/prelude.h
"
6
7
namespace
di::container
{
8
namespace
detail
{
9
struct
ReverseFunction
{
10
template
<concepts::B
id
irectionalIterator 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) {
15
container::iterator_swap
(it, jt);
16
}
17
return
last;
18
}
19
20
template
<concepts::B
id
irectionalContainer 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
28
constexpr
inline
auto
reverse
=
detail::ReverseFunction
{};
29
}
di::concepts::Permutable
Definition
permutable.h:9
prelude.h
prelude.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::next
constexpr auto next
Definition
next.h:35
di::container::reverse
constexpr auto reverse
Definition
reverse.h:28
di::container::iterator_swap
constexpr auto iterator_swap
Definition
iterator_swap.h:49
di::container::end
constexpr auto end
Definition
end.h:47
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::meta::BorrowedIterator
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition
borrowed_iterator.h:11
next.h
di::container::detail::ReverseFunction
Definition
reverse.h:9
libs
di
include
di
container
algorithm
reverse.h
Generated by
1.13.0