functional-dag
Loading...
Searching...
No Matches
fn_dag_interface.hpp
1#pragma once
2// ---------------------------------------------
3// ___ .___
4// |_ \ __| _/____ ____
5// / \ ______ / __ |\__ \ / ___\
6// / /\ \ /_____/ / /_/ | / __ \_/ /_/ >
7// /_/ \__\ \____ |(____ /\___ /
8// \/ \//_____/
9// ---------------------------------------------
10// @author ndepalma@alum.mit.edu
11
12#include<functional>
13
14#include<functional_dag/dag_interface.hpp>
15
16namespace fn_dag {
19 template<typename Out>
20 class __dag_source : public dag_source<Out> {
21 public:
22 std::function<Out *()> m_generator; // Generator lambda function
23
27 __dag_source(std::function<Out *()> _generator) : m_generator(_generator) {}
28
30 ~__dag_source() {}
31
35 Out *update() {return m_generator();};
36 };
37
40 template<typename In, typename Out>
41 class __dag_node : public dag_node<In, Out> {
42 public:
43 std::function<Out *(const In *)> m_update; // Mapping lambda function
44
48 __dag_node(std::function<Out *(const In *)> _update) : m_update(_update) {}
49
51 ~__dag_node() {}
52
57 Out *update(const In *_data) {return m_update(_data);};
58 };
59
69 template<typename Out>
70 dag_source<Out> *fn_source(std::function<Out *()> _run_fn) {
71 return new __dag_source(_run_fn);
72 }
73
83 template<typename In, typename Out>
84 dag_node<In, Out> *fn_call(std::function<Out *(const In *)> _run_fn) {
85 return new __dag_node(_run_fn);
86 }
87
88}
virtual Out * update(const In *_data)=0
Translator function.
virtual Out * update()=0
Generator function to implement by the user.