Iros
Loading...
Searching...
No Matches
prev_permutation.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/algorithm/next_permutation.h
"
4
5
namespace
di::container
{
6
namespace
detail
{
7
struct
PrevPermutationFunction
{
8
template
<concepts::B
id
irectionalIterator It, concepts::SentinelFor<It> Sent,
typename
Comp = function::Compare,
9
typename
Proj = function::Identity>
10
requires
(
concepts::Sortable<It, Comp, Proj>
)
11
constexpr
auto
operator
()(It first, Sent last, Comp comp = {}, Proj
proj
= {})
const
->
InFoundResult<It>
{
12
return
container::next_permutation
(
13
util::move(first), last,
14
[&]<
typename
T,
typename
U>(
15
T&& a, U&& b) ->
decltype
(
function::invoke
(comp, util::forward<T>(a), util::forward<U>(b))) {
16
return
0 <=>
function::invoke
(comp, util::forward<T>(a), util::forward<U>(b));
17
},
18
util::ref
(
proj
));
19
}
20
21
template
<concepts::BidirectionalContainer Con,
typename
Comp = function::Compare,
22
typename
Proj = function::Identity>
23
requires
(concepts::Sortable<meta::ContainerIterator<Con>, Comp, Proj>)
24
constexpr
auto
operator
()(Con&&
container
, Comp comp = {}, Proj
proj
= {})
const
25
->
InFoundResult
<
meta::BorrowedIterator<Con>
> {
26
return
(*
this
)(
container::begin
(
container
),
container::end
(
container
),
util::ref
(comp),
util::ref
(
proj
));
27
}
28
};
29
}
30
31
constexpr
inline
auto
prev_permutation
=
detail::PrevPermutationFunction
{};
32
}
33
34
namespace
di
{
35
using
container::prev_permutation
;
36
}
di::concepts::Sortable
Definition
sortable.h:11
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::prev_permutation
constexpr auto prev_permutation
Definition
prev_permutation.h:31
di::container::next_permutation
constexpr auto next_permutation
Definition
next_permutation.h:71
di::container::end
constexpr auto end
Definition
end.h:47
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::meta::BorrowedIterator
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition
borrowed_iterator.h:11
di::util::ref
constexpr auto ref
Definition
reference_wrapper.h:98
di
Definition
zstring_parser.h:9
di::proj
constexpr auto proj
Definition
proj.h:59
next_permutation.h
di::container::InFoundResult
Definition
in_found_result.h:8
di::container::detail::PrevPermutationFunction
Definition
prev_permutation.h:7
libs
di
include
di
container
algorithm
prev_permutation.h
Generated by
1.13.0