Iros
 
Loading...
Searching...
No Matches
fold_left_first_with_iter.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/meta/util.h"
9#include "di/util/move.h"
12
13namespace di::container {
14namespace detail {
16 template<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent,
17 concepts::IndirectlyBinaryLeftFoldable<meta::IteratorValue<Iter>, Iter> Op>
19 constexpr auto operator()(Iter first, Sent last, Op op) const {
22 if (first == last) {
23 return Res(util::move(first), nullopt);
24 }
25
26 auto result = Optional<R> { in_place, *first };
27 for (++first; first != last; ++first) {
28 result = function::invoke(op, *util::move(result), *first);
29 }
30 return Res(util::move(first), util::move(result));
31 }
32
33 template<concepts::InputContainer Con,
41 };
42}
43
45}
46
47namespace di {
49}
Definition optional_forward_declaration.h:5
Definition operations.h:11
Definition indirectly_binary_left_foldable.h:18
Definition input_container.h:8
Definition sequence.h:13
Definition sequence.h:12
constexpr auto end
Definition end.h:47
constexpr auto fold_left_first_with_iter
Definition fold_left_first_with_iter.h:44
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
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
IteratorReference< ContainerIterator< T > > ContainerReference
Definition container_reference.h:8
decltype(function::detail::invoke_impl(util::declval< Ts >()...)) InvokeResult
Definition invoke.h:64
meta::Type< decltype(container::iterator_value(types::in_place_type< meta::RemoveCVRef< T > >))> IteratorValue
Definition iterator_value.h:8
decltype(*util::declval< T const & >()) IteratorReference
Definition iterator_reference.h:7
IteratorValue< ContainerIterator< T > > ContainerValue
Definition container_value.h:8
decltype(container::begin(util::declval< T & >())) ContainerIterator
Definition container_iterator.h:8
constexpr auto ref
Definition reference_wrapper.h:98
Definition zstring_parser.h:9
constexpr auto nullopt
Definition nullopt.h:15
constexpr auto in_place
Definition in_place.h:8
Definition in_value_result.h:8
Definition fold_left_first_with_iter.h:15