From 1e01ca3e89beca6870a3112c4513df66dd07dbb1 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Sun, 19 Jan 2014 09:33:14 +0000 Subject: json spreadiing --- NT/src/factory.h | 7 +++++++ NT/src/rotor.cpp | 2 ++ NT/src/rotor.h | 25 +++++++++++++++---------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/NT/src/factory.h b/NT/src/factory.h index ae8ddc4..b576c49 100644 --- a/NT/src/factory.h +++ b/NT/src/factory.h @@ -28,6 +28,13 @@ namespace Rotor { } return NULL; }; + Node *create(Json::Value &settings){ + if (type_map.find(settings["type"].asString())!=type_map.end()) { + return type_map[settings["type"].asString()]->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); diff --git a/NT/src/rotor.cpp b/NT/src/rotor.cpp index faea5f0..d244d49 100644 --- a/NT/src/rotor.cpp +++ b/NT/src/rotor.cpp @@ -128,4 +128,6 @@ Json::Value js; f.list_node("multiply",js); Json::StyledWriter writer; cerr< { return "number"; } }; +template <> +struct TypeName { + static const char* Get() { + return "string"; + } +}; + namespace Rotor { @@ -71,7 +78,7 @@ namespace Rotor { class Variable { //pure virtual base type for variable pointers public: Variable(){connection=nullptr;}; - virtual void init(std::string n,std::string s)=0; + virtual void init(std::string s)=0; virtual void init(Json::Value s)=0; virtual ~Variable(){}; virtual bool connect(Node* target)=0; @@ -82,11 +89,10 @@ namespace Rotor { }; template class Variable_type : public Variable { public: - Variable_type(bool _c){connectable=_c;}; - void init(std::string n,std::string s){ + Variable_type(std::string n,bool _c){name=n;connectable=_c;}; + void init(std::string s){ std::istringstream cur(s); cur >> value; - name=n; } void init(Json::Value s){ std::istringstream cur(s["value"].asString()); @@ -121,11 +127,10 @@ namespace Rotor { }; template class Variable_array_type: public Variable_array { public: - Variable_array_type(){connectable=true;}; - void init(std::string n,std::string s){ + Variable_array_type(std::string n){name=n;connectable=true;}; + void init(std::string s){ std::istringstream cur(s); cur >> value; - name=n; } void init(Json::Value s){ std::istringstream cur(s["value"].asString()); @@ -231,15 +236,15 @@ namespace Rotor { } std::string output_type(){return TypeName::Get();}; template Variable_type* create_inlet(std::string name){ - vars[name]=new Variable_type(true); + vars[name]=new Variable_type(name,true); return (dynamic_cast*>(vars[name])); } template Variable_type* create_attribute(std::string name){ - vars[name]=new Variable_type(false); + vars[name]=new Variable_type(name,false); return (dynamic_cast*>(vars[name])); } template Variable_array_type* create_array(std::string name){ - vars[name]=new Variable_array_type(); + vars[name]=new Variable_array_type(name); return (dynamic_cast*>(vars[name])); } }; -- cgit v1.2.3