functional-dag
Loading...
Searching...
No Matches
fn_dag_interface.hpp
1#pragma once
12
13#include <functional>
14#include <functional_dag/dag_interface.hpp>
15
16namespace fn_dag {
17using namespace std;
20template <typename Out>
21class __dag_source : public dag_source<Out> {
22 public:
23 function<unique_ptr<Out>()> m_generator; // Generator lambda function
24
28 __dag_source(function<unique_ptr<Out>()> _generator)
29 : m_generator(_generator) {}
30
32 ~__dag_source() {}
33
37 unique_ptr<Out> update() { return m_generator(); };
38};
39
42template <typename In, typename Out>
43class __dag_node : public dag_node<In, Out> {
44 public:
45 function<unique_ptr<Out>(const In *const)>
46 m_update; // Mapping lambda function
47
51 __dag_node(function<unique_ptr<Out>(const In *const)> _update)
52 : m_update(_update) {}
53
55 ~__dag_node() {}
56
61 unique_ptr<Out> update(const In *const _data) { return m_update(_data); };
62};
63
74template <typename Out>
75dag_source<Out> *fn_source(function<unique_ptr<Out>()> _run_fn) {
76 return new __dag_source(_run_fn);
77}
78
90template <typename In, typename Out>
91dag_node<In, Out> *fn_call(function<unique_ptr<Out>(const In *const)> _run_fn) {
92 return new __dag_node(_run_fn);
93}
94
95} // namespace fn_dag
Interface for all external "mapping" lambdas.
Definition dag_interface.hpp:42
Interface for all external generator lambdas.
Definition dag_interface.hpp:22
Definition guid_generated.h:16
dag_node< In, Out > * fn_call(function< unique_ptr< Out >(const In *const)> _run_fn)
A wrapper function that constructs a mapping wrapper for your mapping function.
Definition fn_dag_interface.hpp:91
dag_source< Out > * fn_source(function< unique_ptr< Out >()> _run_fn)
A wrapper function that constructs a generator wrapper for your generator function.
Definition fn_dag_interface.hpp:75