diff options
Diffstat (limited to 'NT/src/rotor.cpp')
| -rw-r--r-- | NT/src/rotor.cpp | 112 |
1 files changed, 51 insertions, 61 deletions
diff --git a/NT/src/rotor.cpp b/NT/src/rotor.cpp index c10520a..597ded6 100644 --- a/NT/src/rotor.cpp +++ b/NT/src/rotor.cpp @@ -2,81 +2,71 @@ #include "rotor.h" #include "nodes.h" +#include "factory.h" using namespace std; -using namespace Rotor; - -template <class T> -void Rotor::Variable_type<T>::init(std::string s){ - std::istringstream cur(s); - cur >> value; -} -template <class T> -bool Rotor::Variable_type<T>::connect(Node* target){ - if (connectable){ - if (dynamic_cast<Node_type<T>*>(target)){ - connection=target; - return true; - } +namespace Rotor{ + template <class T> + void Rotor::Variable_type<T>::init(std::string s){ + std::istringstream cur(s); + cur >> value; } - return false; -} -template <class T> -const T& Rotor::Variable_type<T>::get(const Frame_parameters &frame){ - if (connection){ - return (dynamic_cast<Node_type<T>*>(connection))->get_output(frame); + template <class T> + bool Rotor::Variable_type<T>::connect(Node* target){ + if (connectable){ + if (dynamic_cast<Node_type<T>*>(target)){ + connection=target; + return true; + } + } + return false; } - return value; -} - -template <class NT> -void Node_type<NT>::init(map<string,string> settings){ - for (auto s:settings) { - if (vars.find(s.first)!=vars.end()){ - vars[s.first]->init(s.second); - //printf("set %s to %s\n",s.first.c_str(),s.second.c_str()); + template <class T> + const T& Rotor::Variable_type<T>::get(const Frame_parameters &frame){ + if (connection){ + return (dynamic_cast<Node_type<T>*>(connection))->get_output(frame); } - }; -} - -template <class NT> -bool Node_type<NT>::connect(string v,Node *t){ - auto var=vars.find(v); - if (var!=vars.end()){ - if ((*var).second->connect(t)){ - return true; + return value; + } + bool Node::connect(string v,Node *t){ + auto var=vars.find(v); + if (var!=vars.end()){ + if ((*var).second->connect(t)){ + return true; + } } + return false; + } + template <class NT> + void Node_type<NT>::init(map<string,string> settings){ + for (auto s:settings) { + if (vars.find(s.first)!=vars.end()){ + vars[s.first]->init(s.second); + //printf("set %s to %s\n",s.first.c_str(),s.second.c_str()); + } + }; } - return false; -} - -template <class NT> -template <class IT> -Variable_type<IT>* Node_type<NT>::create_inlet(std::string name){ - vars[name]=new Variable_type<IT>(true); - return (dynamic_cast<Variable_type<IT>*>(vars[name])); } -template <class NT> -template <class IT> -Variable_type<IT>* Node_type<NT>::create_attribute(std::string name){ - vars[name]=new Variable_type<IT>(false); - return (dynamic_cast<Variable_type<IT>*>(vars[name])); -} +using namespace Rotor; int main(){ - Rotor::time t; - multiply m; - map<string,string> settings={{"value","2"}}; - m.init(settings); - if (!m.connect("inlet",&t)) printf("not connected...\n"); - Rotor::print p; - if (!p.connect("inlet",&m)) printf("not connected...\n"); + Node_factory f; + map<string,string> settings={{"type","time"}}; + Node *t=f.create(settings); + settings={{"value","2"},{"type","multiply"}}; + Node *m=f.create(settings); + if (!m->connect("inlet",t)) printf("not connected...\n"); + settings={{"type","print"}}; + Node *p=f.create(settings); + if (!p->connect("inlet",m)) printf("not connected...\n"); for (double t=0;t<10.0;t+=0.765){ Frame_parameters f=Frame_parameters(t,25.0,10.0,640,360); - printf("%04f %s\n",t,p.get_output(f).c_str()); - + printf("%04f %s\n",t,(dynamic_cast<Node_type<string>*>(p))->get_output(f).c_str()); } + delete t; + delete m; + delete p; } |
