Iros
 
Loading...
Searching...
No Matches
move_backward.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::container {
9template<typename In, typename Out>
11
12namespace detail {
14 template<concepts::BidirectionalIterator In, concepts::SentinelFor<In> Sent,
15 concepts::BidirectionalIterator Out>
17 constexpr auto operator()(In first, Sent last, Out output) const -> MoveBackwardResult<In, Out> {
18 auto last_it = container::next(first, last);
19 for (auto it = last_it; it != first;) {
20 *--output = container::iterator_move(--it);
21 }
22 return { util::move(last_it), util::move(output) };
23 }
24
25 template<concepts::BidirectionalContainer Con, concepts::BidirectionalIterator Out>
27 constexpr auto operator()(Con&& container, Out output) const
29 return (*this)(begin(container), end(container), util::move(output));
30 }
31 };
32}
33
35}
Definition indirectly_movable.h:9
Definition sequence.h:13
Definition sequence.h:12
constexpr auto next
Definition next.h:35
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto move_backward
Definition move_backward.h:34
constexpr auto end
Definition end.h:47
InOutResult< In, Out > MoveBackwardResult
Definition move_backward.h:10
constexpr auto begin
Definition begin.h:44
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
Definition in_out_result.h:8
Definition move_backward.h:13