summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rotord/src/graph.cpp91
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;