#ifndef ROTOR_FACTORY_H #define ROTOR_FACTORY_H #include "rotor.h" #include "nodes.h" #include "xmlIO.h" namespace Rotor { class Node_factory{ public: Node_factory(); ~Node_factory(){ for (auto t:type_map) delete t.second; } void add_type(std::string type,Node* proto){ type_map[type]=proto; type_map[type]->type=type; }; void add_type(std::string type,Node* proto,std::string category){ add_type(type,proto); if (category_map.find(category)==category_map.end()) category_map[category]=vector(); category_map[category].push_back(proto); }; Node *create(std::map &settings){ if (settings.find("type")!=settings.end()) { if (type_map.find(settings["type"])!=type_map.end()) { return type_map[settings["type"]]->clone(settings); } } return NULL; }; bool list_node(const std::string &t,xmlIO XML); bool list_node(const std::string &t,Json::Value &JSON); void list_node(Rotor::Node* type,xmlIO XML,int i=0); Json::Value list_node(Rotor::Node* type); void list_nodes(xmlIO XML); void list_nodes(Json::Value &JSON); void list_categories(xmlIO XML); void list_categories(Json::Value &JSON); private: std::map type_map; std::map > category_map; }; } #endif //ROTOR_H