di 0.1.0
Loading...
Searching...
No Matches
generate.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container {
8namespace detail {
9 struct GenerateFunction {
10 template<concepts::Iterator Out, concepts::SentinelFor<Out> Sent, concepts::CopyConstructible F>
11 requires(concepts::Invocable<F&> && concepts::IndirectlyWritable<Out, meta::InvokeResult<F&>>)
12 constexpr auto operator()(Out output, Sent last, F gen) const -> Out {
13 for (; output != last; ++output) {
14 *output = function::invoke(gen);
15 }
16 return output;
17 }
18
19 template<typename Con, concepts::CopyConstructible F>
20 requires(concepts::Invocable<F&> && concepts::OutputContainer<Con, meta::InvokeResult<F&>>)
21 constexpr auto operator()(Con&& container, F gen) const -> meta::BorrowedIterator<Con> {
22 return (*this)(container::begin(container), container::end(container), util::ref(gen));
23 }
24 };
25}
26
27constexpr inline auto generate = detail::GenerateFunction {};
28}
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
Definition sequence.h:12
constexpr auto generate
Definition generate.h:27
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
constexpr auto invoke
Definition invoke.h:100
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
constexpr auto ref
Definition reference_wrapper.h:98