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