X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/48f48e6a26a54751ecd0ab90b10ab972cc5e89cd..7b1c7e44123b9b2626205a89e27b2a4712ea30c6:/Graph.cpp?ds=inline diff --git a/Graph.cpp b/Graph.cpp index 999e72a..0fb4fcb 100644 --- a/Graph.cpp +++ b/Graph.cpp @@ -2,6 +2,7 @@ #include "GroupBlock.h" #include "ReferenceBlock.h" #include "FunctionalBlock.h" +#include "Exception.h" Graph::Graph() { topGroup = new GroupBlock(NULL); @@ -108,12 +109,16 @@ bool Graph::removeSourceBlock(FunctionalBlock *block) { return true; } -bool Graph::createPatterns() { +void Graph::createPatterns() throw(Exception) { bool ok = true; 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,12 +126,15 @@ 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() { @@ -144,7 +152,14 @@ void Graph::resetPatternComputed() { bool Graph::computeOutputPatterns(int nbExec) { - createPatterns(); + try { + createPatterns(); + } + catch(Exception e) { + cerr << qPrintable(e.getMessage()) << endl; + return false; + } + resetPatternComputed(); // search for all block that are generators. QList generators; @@ -158,17 +173,23 @@ bool Graph::computeOutputPatterns(int nbExec) { } } } - // search for maximum delta - int maxDelta = 0; + // search for maximum PP length + int maxPP = 0; foreach(FunctionalBlock* block, generators) { - if (block->getDelta() > maxDelta) maxDelta = block->getDelta(); + if (block->getProductionPatternLength() > maxPP) maxPP = block->getProductionPatternLength(); } // compute output for generators - int maxExecLen = maxDelta*nbExec; + int maxExecLen = maxPP*nbExec; foreach(FunctionalBlock* block, generators) { - int d = block->getDelta(); + int d = block->getProductionPatternLength(); block->computeOutputPattern((maxExecLen+d-1)/d); } // compute output for top group - topGroup->computeOutputPattern(); + try { + topGroup->computeOutputPattern(); + } + catch(Exception e) { + cerr << qPrintable(e.getMessage()) << endl; + return false; + } }