Iros
 
Loading...
Searching...
No Matches
piped.h
Go to the documentation of this file.
1#pragma once
2
6#include "di/meta/util.h"
7#include "di/types/in_place.h"
8#include "di/util/forward.h"
9#include "di/util/move.h"
10
11namespace di::function {
12namespace detail {
13 template<typename F>
15 public:
16 template<typename Fn>
17 constexpr PipedFunction(types::InPlace, Fn&& function) : m_function(util::forward<Fn>(function)) {}
18
19 constexpr PipedFunction(PipedFunction const&) = default;
20 constexpr PipedFunction(PipedFunction&&) = default;
21
22 constexpr auto operator=(PipedFunction const&) -> PipedFunction& = delete;
23 constexpr auto operator=(PipedFunction&&) -> PipedFunction& = delete;
24
25 template<typename... Args>
26 requires(concepts::Invocable<F&, Args...>)
27 constexpr auto operator()(Args&&... args) & -> decltype(auto) {
28 return function::invoke(m_function, util::forward<Args>(args)...);
29 }
30
31 template<typename... Args>
32 requires(concepts::Invocable<F const&, Args...>)
33 constexpr auto operator()(Args&&... args) const& -> decltype(auto) {
34 return function::invoke(m_function, util::forward<Args>(args)...);
35 }
36
37 template<typename... Args>
38 requires(concepts::Invocable<F &&, Args...>)
39 constexpr auto operator()(Args&&... args) && -> decltype(auto) {
40 return function::invoke(util::move(m_function), util::forward<Args>(args)...);
41 }
42
43 template<typename... Args>
44 requires(concepts::Invocable<F const &&, Args...>)
45 constexpr auto operator()(Args&&... args) const&& -> decltype(auto) {
46 return function::invoke(util::move(m_function), util::forward<Args>(args)...);
47 }
48
49 private:
50 F m_function;
51 };
52}
53
54template<typename F>
56constexpr auto piped(F&& function) {
58}
59}
60
61namespace di {
62using function::piped;
63}
constexpr PipedFunction(PipedFunction &&)=default
constexpr auto operator=(PipedFunction &&) -> PipedFunction &=delete
constexpr PipedFunction(types::InPlace, Fn &&function)
Definition piped.h:17
constexpr auto operator=(PipedFunction const &) -> PipedFunction &=delete
constexpr PipedFunction(PipedFunction const &)=default
Definition operations.h:11
Definition invoke.h:58
Definition bind_back.h:16
Definition as_bool.h:8
constexpr auto invoke
Definition invoke.h:100
constexpr auto piped(F &&function)
Definition piped.h:56
constexpr auto in_place
Definition in_place.h:8
Definition vocab.h:96
Definition zstring_parser.h:9
Definition in_place.h:4