X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/2019e5afdaf7fd0ad21607848710348bbc3be256..4cf57e6db08da791233d75237f62e74bc88dd427:/Graph.cpp diff --git a/Graph.cpp b/Graph.cpp index eb66dc4..bd1eb70 100644 --- a/Graph.cpp +++ b/Graph.cpp @@ -24,7 +24,7 @@ GroupBlock* Graph::createChildGroupBlock(GroupBlock* parent) { return b; } -bool Graph::removeGroupBlock(GroupBlock *group) { +void Graph::removeGroupBlock(GroupBlock *group) { group->removeAllBlocks(); GroupBlock* parent = AB_TO_GRP(group->getParent()); parent->removeBlock(group); @@ -88,8 +88,7 @@ FunctionalBlock* Graph::createSourceBlock(ReferenceBlock* ref) { FunctionalBlock* Graph::duplicateSourceBlock(FunctionalBlock *block) { - ReferenceBlock* ref = block->getReference(); - GroupBlock* group = AB_TO_GRP(block->getParent()); + ReferenceBlock* ref = block->getReference(); // adding to the graph FunctionalBlock* newBlock = createSourceBlock(ref); @@ -108,12 +107,16 @@ bool Graph::removeSourceBlock(FunctionalBlock *block) { return true; } -bool Graph::createPatterns() { - bool ok = true; +void Graph::createPatterns() throw(Exception) { + foreach(AbstractBlock* block, sources) { FunctionalBlock* funBlock = AB_TO_FUN(block); - ok = funBlock->createPatterns(); - if (!ok) return false; + try { + funBlock->createPatterns(); + } + catch(Exception e) { + throw(e); + } } foreach(AbstractBlock* block, groups) { @@ -121,31 +124,43 @@ bool Graph::createPatterns() { foreach(AbstractBlock* inBlock, group->getBlocks()) { if (inBlock->isFunctionalBlock()) { FunctionalBlock* funBlock = AB_TO_FUN(inBlock); - ok = funBlock->createPatterns(); - if (!ok) return false; + try { + funBlock->createPatterns(); + } + catch(Exception e) { + throw(e); + } } } - } - return true; + } } void Graph::resetPatternComputed() { foreach(AbstractBlock* block, sources) { block->setPatternComputed(false); + block->resetTraversalLevel(); } foreach(AbstractBlock* block, groups) { GroupBlock* group = AB_TO_GRP(block); group->setPatternComputed(false); + block->resetTraversalLevel(); foreach(AbstractBlock* inBlock, group->getBlocks()) { inBlock->setPatternComputed(false); + block->resetTraversalLevel(); } } } -bool Graph::computeOutputPatterns(int nbExec) { +void Graph::computeOutputPatterns(int nbExec) throw(Exception) { - createPatterns(); - resetPatternComputed(); + try { + createPatterns(); + } + catch(Exception e) { + throw(e); + } + + resetPatternComputed(); // search for all block that are generators. QList generators; generators.append(sources); @@ -170,5 +185,10 @@ bool Graph::computeOutputPatterns(int nbExec) { block->computeOutputPattern((maxExecLen+d-1)/d); } // compute output for top group - topGroup->computeOutputPattern(); + try { + topGroup->computeOutputPattern(); + } + catch(Exception e) { + throw(e); + } }