]> AND Private Git Repository - blast.git/blobdiff - Graph.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
modifying pattern methods to throw exceptions
[blast.git] / Graph.cpp
index 999e72aa375fc4d4d2a1c0a7a198057a3646deed..0fb4fcb612933fff65265619655d45601adaacf5 100644 (file)
--- a/Graph.cpp
+++ b/Graph.cpp
@@ -2,6 +2,7 @@
 #include "GroupBlock.h"
 #include "ReferenceBlock.h"
 #include "FunctionalBlock.h"
 #include "GroupBlock.h"
 #include "ReferenceBlock.h"
 #include "FunctionalBlock.h"
+#include "Exception.h"
 
 Graph::Graph() {
   topGroup = new GroupBlock(NULL);
 
 Graph::Graph() {
   topGroup = new GroupBlock(NULL);
@@ -108,12 +109,16 @@ bool Graph::removeSourceBlock(FunctionalBlock *block) {
   return true;
 }
 
   return true;
 }
 
-bool Graph::createPatterns() {
+void Graph::createPatterns() throw(Exception) {
   bool ok = true;
   foreach(AbstractBlock* block, sources) {
     FunctionalBlock* funBlock = AB_TO_FUN(block);
   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) {
   }
   
   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);
     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() {
 }
 
 void Graph::resetPatternComputed() {
@@ -144,7 +152,14 @@ void Graph::resetPatternComputed() {
 
 bool Graph::computeOutputPatterns(int nbExec) {
   
 
 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<FunctionalBlock*> generators;
   resetPatternComputed();  
   // search for all block that are generators.
   QList<FunctionalBlock*> 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) {    
   foreach(FunctionalBlock* block, generators) {    
-    if (block->getDelta() > maxDelta) maxDelta = block->getDelta();
+    if (block->getProductionPatternLength() > maxPP) maxPP = block->getProductionPatternLength();
   }
   // compute output for generators
   }
   // compute output for generators
-  int maxExecLen = maxDelta*nbExec;
+  int maxExecLen = maxPP*nbExec;
   foreach(FunctionalBlock* block, generators) {    
   foreach(FunctionalBlock* block, generators) {    
-    int d = block->getDelta();
+    int d = block->getProductionPatternLength();
     block->computeOutputPattern((maxExecLen+d-1)/d);
   }
   // compute output for top group
     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;
+  }
 }
 }