From 815d1149f9fb6be2c1bc05fb04f574eb928e050e Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Fri, 3 Jan 2014 19:57:48 +0000 Subject: updated refactored files --- NT/src/factory.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 NT/src/factory.h (limited to 'NT/src/factory.h') diff --git a/NT/src/factory.h b/NT/src/factory.h new file mode 100644 index 0000000..ac204a0 --- /dev/null +++ b/NT/src/factory.h @@ -0,0 +1,47 @@ +#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 + -- cgit v1.2.3