X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/4327c2b8817b627249d98d889835726217c81a4e..bc5d59217a24b25c1b913bec4a41dd026d02720c:/GroupBlock.cpp diff --git a/GroupBlock.cpp b/GroupBlock.cpp index 206d8cb..d3ff0ed 100644 --- a/GroupBlock.cpp +++ b/GroupBlock.cpp @@ -200,12 +200,10 @@ void GroupBlock::computeOutputPattern(int nbExec) throw(Exception) { while (!fifo.isEmpty()) { AbstractBlock* block = fifo.takeFirst(); - if (block->getOutputPatternComputed()) continue; // block has already been processed - - cout << "computing compat and output for " << qPrintable(block->getName()) << endl; - + if (block->getOutputPatternComputed()) continue; // block has already been processed try { + cout << "computing compatibility of " << qPrintable(block->getName()) << endl; block->checkInputPatternCompatibility(); } catch(Exception e) { @@ -214,6 +212,7 @@ void GroupBlock::computeOutputPattern(int nbExec) throw(Exception) { } try { + cout << "computing output of " << qPrintable(block->getName()) << endl; block->computeOutputPattern(); } catch(Exception e) { @@ -230,29 +229,32 @@ void GroupBlock::computeOutputPattern(int nbExec) throw(Exception) { ConnectedInterface* conn = (ConnectedInterface*)iface; foreach(ConnectedInterface* connTo, conn->getConnectedTo()) { - AbstractBlock* block1 = connTo->getOwner(); - cout << "testing if " << qPrintable(block1->getName()) << " has all connected inputs connected to already processed blocks" << endl; - bool addIt = true; - int maxLevel = 0; - - foreach(AbstractInterface* iface, block1->getControlInputs()) { - //cout << qPrintable(iface->getName()) << " of " << qPrintable(iface->getOwner()->getName()) << " connected to " << endl; - ConnectedInterface* connFrom = ((ConnectedInterface*)iface)->getConnectedFrom(); - //cout << qPrintable(connFrom->getName()) << " of " << qPrintable(connFrom->getOwner()->getName()) << endl; - - if ((connFrom != NULL) && (connFrom->getOwner()->getOutputPatternComputed() == false)) { - addIt = false; - break; - } - else { - if (connFrom->getOwner()->getTraversalLevel() > maxLevel) maxLevel = connFrom->getOwner()->getTraversalLevel(); + AbstractBlock* blockTo = connTo->getOwner(); + // do sthg only if blockTo is not this group block + if (blockTo != this) { + cout << "testing if " << qPrintable(blockTo->getName()) << " has all connected inputs connected to already processed blocks" << endl; + bool addIt = true; + int maxLevel = 0; + + foreach(AbstractInterface* iface, blockTo->getControlInputs()) { + cout << qPrintable(iface->getName()) << "/" << qPrintable(iface->getOwner()->getName()) << " connected from "; + ConnectedInterface* connFrom = ((ConnectedInterface*)iface)->getConnectedFrom(); + cout << qPrintable(connFrom->getName()) << "/" << qPrintable(connFrom->getOwner()->getName()) << endl; + + if ((connFrom != NULL) && (connFrom->getOwner()->getOutputPatternComputed() == false)) { + addIt = false; + break; + } + else { + if (connFrom->getOwner()->getTraversalLevel() > maxLevel) maxLevel = connFrom->getOwner()->getTraversalLevel(); + } } - } - if (addIt) { - cout << "adding " << qPrintable(block1->getName()) << " to the FIFO" << endl; - block1->setTraversalLevel(maxLevel+1); // level 0 = first blocks to be evaluated - fifo.append(block1); + if (addIt) { + cout << "adding " << qPrintable(blockTo->getName()) << " to the FIFO" << endl; + blockTo->setTraversalLevel(maxLevel+1); // level 0 = first blocks to be evaluated + fifo.append(blockTo); + } } } }