#include #include #include namespace Rotor { class Node; class Frame_parameters; class Variable { //base type for variable pointers public: virtual void init(std::string s){}; virtual ~Variable(){}; }; template class Variable_type : public Variable { public: Node* connection; T* get(Frame_parameters frame); bool connectable; T value; }; //type specialisations deal with string conversion //what happens if we want to link an unlinked attribute at runtime //should attributes and paramaters just be the same thing //it would be really nice if there could be arithmetic //type objects that could act on multiple types //either we call them attributes and inlets or just vars //for the author, is it better to have seperate static members? //for the GUI, yes. but is that another issue? //does the gui need a hint for the "basic" mode inlets so they stand out? class Node { //base type for node pointers }; template class Node_type : public Node { public: std::unordered_map vars; NT* get_output(Frame_parameters frame); virtual ~Node_type(){ for (auto v:vars){ delete v.second; } } void init(std::map settings){ for (auto s:settings) { if (vars.find(s.first)){ vars[s.first]->init(s.second); } } } template IT* create_inlet(std::string name){ vars[name]=new Variable_type(); return &((dynamic_cast*>(vars[name]))->value); } }; class a_node: public Node_type { a_node(){ delay=create_inlet("delay"); //initialise the pointer to point at the instance variable //how to delete the vars ??? }; int *delay; }; }