Iros
 
Loading...
Searching...
No Matches
fold_right.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container {
8namespace detail {
10 template<concepts::BidirectionalIterator It, concepts::SentinelFor<It> Sent, typename T,
11 concepts::IndirectlyBinaryRightFoldable<T, It> Op>
12 constexpr auto operator()(It first, Sent last, T init, Op op) const {
14 if (first == last) {
15 return R(util::move(init));
16 }
17 auto it_last = container::next(first, last);
18 R value = function::invoke(op, *--it_last, util::move(init));
19 while (it_last != first) {
20 value = function::invoke(op, *--it_last, util::move(value));
21 }
22 return value;
23 }
24
25 template<concepts::BidirectionalContainer Con, typename T,
27 constexpr auto operator()(Con&& container, T init, Op op) const {
28 return (*this)(container::begin(container), container::end(container), util::move(init), util::ref(op));
29 }
30 };
31}
32
33constexpr inline auto fold_right = detail::FoldRightFunction {};
34}
35
36namespace di {
38}
Definition bidirectional_container.h:8
Definition indirectly_binary_right_foldable.h:22
Definition sequence.h:13
Definition sequence.h:12
constexpr auto next
Definition next.h:35
constexpr auto end
Definition end.h:47
constexpr auto fold_right
Definition fold_right.h:33
constexpr auto begin
Definition begin.h:44
constexpr auto invoke
Definition invoke.h:100
Conditional< concepts::LanguageArray< RemoveReference< T > >, RemoveExtent< RemoveReference< T > > *, Conditional< concepts::LanguageFunction< RemoveReference< T > >, AddPointer< RemoveReference< T > >, RemoveCVRef< T > > > Decay
Definition language.h:574
constexpr auto ref
Definition reference_wrapper.h:98
Definition zstring_parser.h:9
constexpr auto operator()(It first, Sent last, T init, Op op) const
Definition fold_right.h:12
constexpr auto operator()(Con &&container, T init, Op op) const
Definition fold_right.h:27