Iros
Loading...
Searching...
No Matches
rotate_copy.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/algorithm/copy.h
"
4
#include "
di/container/algorithm/in_out_result.h
"
5
#include "
di/container/concepts/prelude.h
"
6
#include "
di/container/iterator/prelude.h
"
7
#include "
di/container/meta/prelude.h
"
8
9
namespace
di::container
{
10
namespace
detail
{
11
struct
RotateCopyFunction
{
12
template
<concepts::ForwardIterator It, concepts::SentinelFor<It> Sent, concepts::WeaklyIncrementable Out>
13
requires
(
concepts::IndirectlyCopyable<It, Out>
)
14
constexpr
auto
operator
()(It first, It middle, Sent last, Out output)
const
->
InOutResult<It, Out>
{
15
auto
copy_left =
container::copy
(middle, last, util::move(output));
16
auto
copy_right =
container::copy
(util::move(first), util::move(middle), util::move(copy_left.out));
17
return
{ util::move(copy_left.in), util::move(copy_right.out) };
18
}
19
20
template
<concepts::ForwardContainer Con, concepts::WeaklyIncrementable Out>
21
requires
(
concepts::IndirectlyCopyable<meta::ContainerIterator<Con>
, Out>)
22
constexpr
auto
operator
()(Con&&
container
,
meta::ContainerIterator<Con>
middle, Out output)
const
23
->
InOutResult
<
meta::BorrowedIterator<Con>
, Out> {
24
return
(*
this
)(
container::begin
(
container
), util::move(middle),
container::end
(
container
),
25
util::move(output));
26
}
27
};
28
}
29
30
constexpr
inline
auto
rotate_copy
=
detail::RotateCopyFunction
{};
31
}
32
33
namespace
di
{
34
using
container::rotate_copy
;
35
}
di::concepts::IndirectlyCopyable
Definition
indirectly_copyable.h:9
copy.h
in_out_result.h
prelude.h
prelude.h
prelude.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::rotate_copy
constexpr auto rotate_copy
Definition
rotate_copy.h:30
di::container::end
constexpr auto end
Definition
end.h:47
di::container::copy
constexpr auto copy
Definition
copy.h:30
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
di::meta::ContainerIterator
decltype(container::begin(util::declval< T & >())) ContainerIterator
Definition
container_iterator.h:8
di
Definition
zstring_parser.h:9
di::container::InOutResult
Definition
in_out_result.h:8
di::container::detail::RotateCopyFunction
Definition
rotate_copy.h:11
libs
di
include
di
container
algorithm
rotate_copy.h
Generated by
1.13.0