diff options
Diffstat (limited to 'rotord/src/graph.cpp')
| -rw-r--r-- | rotord/src/graph.cpp | 91 |
1 files changed, 47 insertions, 44 deletions
diff --git a/rotord/src/graph.cpp b/rotord/src/graph.cpp index 59f7361..8b85113 100644 --- a/rotord/src/graph.cpp +++ b/rotord/src/graph.cpp @@ -85,58 +85,61 @@ bool Graph::parseXml(){ Node* node=factory.create(settings); if (node) { string nodeID=xml.getAttribute("node","ID","",i1); - cerr << "Rotor: created node '"<<nodeID<<"': '"<< xml.getAttribute("node","type","",i1) << "'" << endl; - nodes[nodeID]=node; - if(xml.pushTag("node",i1)) { - int n2=xml.getNumTags("signal_input"); - for (int i2=0;i2<n2;i2++){ - nodes[nodeID]->create_signal_input(xml.getValue("signal_input","",i2)); - string fromID=xml.getAttribute("signal_input","from","",i2); - if (nodes.find(fromID)!=nodes.end()) { - if (!nodes[nodeID]->inputs[i2]->connect((Signal_node*)nodes[fromID])){ - cerr << "Rotor: graph loader cannot connect input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; - return false; + if (nodes.find(nodeID)==nodes.end()){ + cerr << "Rotor: creating node '"<<nodeID<<"': '"<< xml.getAttribute("node","type","",i1) << "'" << endl; + nodes[nodeID]=node; + if(xml.pushTag("node",i1)) { + int n2=xml.getNumTags("signal_input"); + for (int i2=0;i2<n2;i2++){ + nodes[nodeID]->create_signal_input(xml.getValue("signal_input","",i2)); + string fromID=xml.getAttribute("signal_input","from","",i2); + if (nodes.find(fromID)!=nodes.end()) { + if (!nodes[nodeID]->inputs[i2]->connect((Signal_node*)nodes[fromID])){ + cerr << "Rotor: graph loader cannot connect input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + return false; + } + else cerr << "Rotor: linked input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; } - else cerr << "Rotor: linked input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + else cerr << "Rotor: linking input " << i2 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; } - else cerr << "Rotor: linking input " << i2 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; - } - int n3=xml.getNumTags("image_input"); - for (int i3=0;i3<n3;i3++){ - ((Image_node*)nodes[nodeID])->create_image_input(xml.getValue("image_input","",i3)); - string fromID=xml.getAttribute("image_input","from","",i3); - if (nodes.find(fromID)!=nodes.end()) { - if (!(((Image_node*)nodes[nodeID])->image_inputs[i3]->connect((Image_node*)nodes[fromID]))){ - cerr << "Rotor: graph loader cannot connect image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; - return false; + int n3=xml.getNumTags("image_input"); + for (int i3=0;i3<n3;i3++){ + ((Image_node*)nodes[nodeID])->create_image_input(xml.getValue("image_input","",i3)); + string fromID=xml.getAttribute("image_input","from","",i3); + if (nodes.find(fromID)!=nodes.end()) { + if (!(((Image_node*)nodes[nodeID])->image_inputs[i3]->connect((Image_node*)nodes[fromID]))){ + cerr << "Rotor: graph loader cannot connect image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + return false; + } + else cerr << "Rotor: linked image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; } - else cerr << "Rotor: linked image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + else cerr << "Rotor: linking image input " << i3 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; } - else cerr << "Rotor: linking image input " << i3 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; - } - int n4=xml.getNumTags("parameter_input"); - for (int i4=0;i4<n4;i4++){ - nodes[nodeID]->create_parameter_input(xml.getAttribute("parameter_input","parameter","",i4),xml.getValue("parameter_input","",i4)); - string fromID=xml.getAttribute("parameter_input","from","",i4); - if (nodes.find(fromID)!=nodes.end()) { - if (!nodes[nodeID]->parameter_inputs[i4]->connect(nodes[fromID])){ - cerr << "Rotor: graph loader cannot connect parameter input " << i4 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; - return false; + int n4=xml.getNumTags("parameter_input"); + for (int i4=0;i4<n4;i4++){ + nodes[nodeID]->create_parameter_input(xml.getAttribute("parameter_input","parameter","",i4),xml.getValue("parameter_input","",i4)); + string fromID=xml.getAttribute("parameter_input","from","",i4); + if (nodes.find(fromID)!=nodes.end()) { + if (!nodes[nodeID]->parameter_inputs[i4]->connect(nodes[fromID])){ + cerr << "Rotor: graph loader cannot connect parameter input " << i4 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + return false; + } + else cerr << "Rotor: linked parameter input " << i4 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; } - else cerr << "Rotor: linked parameter input " << i4 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + else cerr << "Rotor: linking parameter input " << i4 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; } - else cerr << "Rotor: linking parameter input " << i4 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; - } - nodes[nodeID]->link_params(); - //extra key/value pairs that can be specific to sub-settings - int n5=xml.getNumTags("parameter"); - for (int i5=0;i5<n5;i5++){ - nodes[nodeID]->set_parameter(xml.getAttribute("parameter","name","",i5),xml.getAttribute("parameter","value","",i5)); + nodes[nodeID]->link_params(); + //extra key/value pairs that can be specific to sub-settings + int n5=xml.getNumTags("parameter"); + for (int i5=0;i5<n5;i5++){ + nodes[nodeID]->set_parameter(xml.getAttribute("parameter","name","",i5),xml.getAttribute("parameter","value","",i5)); + } + if (n5>0) cerr << "Rotor: found " << n5 << " extra parameters for node '" << nodeID << "'" << endl; + + xml.popTag(); } - if (n5>0) cerr << "Rotor: found " << n5 << " extra parameters for node '" << nodeID << "'" << endl; - - xml.popTag(); } + else cerr << "Rotor: duplicate node '"<<nodeID<<"' "<< endl; } else { cerr << "Rotor: graph loader cannot find node '" << xml.getAttribute("node","type","",i1) << "'" << endl; |
