From d9abdcbce9f0c3c7dbfebc00827e05536cb196e4 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Mon, 30 Dec 2013 08:55:15 +0000 Subject: adding node factory --- NT/src/rotor.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 17 deletions(-) (limited to 'NT/src/rotor.cpp') diff --git a/NT/src/rotor.cpp b/NT/src/rotor.cpp index ca15423..c10520a 100644 --- a/NT/src/rotor.cpp +++ b/NT/src/rotor.cpp @@ -1,6 +1,7 @@ #include #include "rotor.h" +#include "nodes.h" using namespace std; using namespace Rotor; @@ -8,28 +9,62 @@ using namespace Rotor; template void Rotor::Variable_type::init(std::string s){ std::istringstream cur(s); -cur >> value; - //std::cout<> value; +} template bool Rotor::Variable_type::connect(Node* target){ - if (connectable){ - if (dynamic_cast*>(target)){ - connection=target; - return true; - } - } - return false; - } + if (connectable){ + if (dynamic_cast*>(target)){ + connection=target; + return true; + } + } + return false; +} template const T& Rotor::Variable_type::get(const Frame_parameters &frame){ - if (connection){ - return (dynamic_cast*>(connection))->get_output(frame); - } - return value; + if (connection){ + return (dynamic_cast*>(connection))->get_output(frame); + } + return value; +} + +template +void Node_type::init(map 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 +bool Node_type::connect(string v,Node *t){ + auto var=vars.find(v); + if (var!=vars.end()){ + if ((*var).second->connect(t)){ + return true; } + } + return false; +} + +template +template +Variable_type* Node_type::create_inlet(std::string name){ + vars[name]=new Variable_type(true); + return (dynamic_cast*>(vars[name])); +} + +template +template +Variable_type* Node_type::create_attribute(std::string name){ + vars[name]=new Variable_type(false); + return (dynamic_cast*>(vars[name])); +} int main(){ Rotor::time t; @@ -37,8 +72,8 @@ int main(){ map 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"); + Rotor::print p; + 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()); -- cgit v1.2.3