#include #include "rotor.h" #include "nodes.h" #include "factory.h" using namespace std; namespace Rotor{ template void Rotor::Variable_type::init(std::string s){ std::istringstream cur(s); cur >> value; } template bool Rotor::Variable_type::connect(Node* target){ 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; } 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 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()); } }; } } using namespace Rotor; int main(){ Node_factory f; map 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,(dynamic_cast*>(p))->get_output(f).c_str()); } delete t; delete m; delete p; }