Iros
Loading...
Searching...
No Matches
generate.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/concepts/prelude.h
"
4
#include "
di/container/iterator/prelude.h
"
5
#include "
di/container/meta/prelude.h
"
6
7
namespace
di::container
{
8
namespace
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
27
constexpr
inline
auto
generate
=
detail::GenerateFunction
{};
28
}
di::concepts::IndirectlyWritable
Definition
indirectly_writable.h:8
di::concepts::Invocable
Definition
invoke.h:58
di::concepts::OutputContainer
Definition
output_container.h:9
prelude.h
prelude.h
prelude.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::generate
constexpr auto generate
Definition
generate.h:27
di::container::end
constexpr auto end
Definition
end.h:47
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::meta::BorrowedIterator
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition
borrowed_iterator.h:11
di::util::ref
constexpr auto ref
Definition
reference_wrapper.h:98
di::container::detail::GenerateFunction
Definition
generate.h:9
libs
di
include
di
container
algorithm
generate.h
Generated by
1.13.0