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

Private GIT Repository
started VHDL generation of GroupBlock
[blast.git] / Graph.cpp
index 0fb4fcb612933fff65265619655d45601adaacf5..5b491b07ea15c5cd24d06daff89e90ff1bc814fa 100644 (file)
--- a/Graph.cpp
+++ b/Graph.cpp
@@ -2,7 +2,6 @@
 #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);
@@ -25,7 +24,7 @@ GroupBlock* Graph::createChildGroupBlock(GroupBlock* parent) {
   return b;
 }
 
   return b;
 }
 
-bool Graph::removeGroupBlock(GroupBlock *group) {
+void Graph::removeGroupBlock(GroupBlock *group) {
   group->removeAllBlocks();
   GroupBlock* parent = AB_TO_GRP(group->getParent());
   parent->removeBlock(group);
   group->removeAllBlocks();
   GroupBlock* parent = AB_TO_GRP(group->getParent());
   parent->removeBlock(group);
@@ -89,8 +88,7 @@ FunctionalBlock* Graph::createSourceBlock(ReferenceBlock* ref) {
 
 FunctionalBlock* Graph::duplicateSourceBlock(FunctionalBlock *block) {
 
 
 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);
 
   // adding to the graph
   FunctionalBlock* newBlock = createSourceBlock(ref);
@@ -110,7 +108,7 @@ bool Graph::removeSourceBlock(FunctionalBlock *block) {
 }
 
 void Graph::createPatterns() throw(Exception) {
 }
 
 void Graph::createPatterns() throw(Exception) {
-  bool ok = true;
+  
   foreach(AbstractBlock* block, sources) {
     FunctionalBlock* funBlock = AB_TO_FUN(block);
     try {
   foreach(AbstractBlock* block, sources) {
     FunctionalBlock* funBlock = AB_TO_FUN(block);
     try {
@@ -140,27 +138,29 @@ void Graph::createPatterns() throw(Exception) {
 void Graph::resetPatternComputed() {
   foreach(AbstractBlock* block, sources) {
     block->setPatternComputed(false);
 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);
   }
   foreach(AbstractBlock* block, groups) {
     GroupBlock* group = AB_TO_GRP(block);
     group->setPatternComputed(false);
+    block->resetTraversalLevel();
     foreach(AbstractBlock* inBlock, group->getBlocks()) {
       inBlock->setPatternComputed(false);
     foreach(AbstractBlock* inBlock, group->getBlocks()) {
       inBlock->setPatternComputed(false);
+      block->resetTraversalLevel();
     }
   }
 }
 
     }
   }
 }
 
-bool Graph::computeOutputPatterns(int nbExec) {
+void Graph::computeOutputPatterns(int nbExec) throw(Exception) {
   
   try {
     createPatterns();
   }
   catch(Exception e) {
   
   try {
     createPatterns();
   }
   catch(Exception e) {
-    cerr << qPrintable(e.getMessage()) << endl;
-    return false;
+    throw(e);    
   }
 
   }
 
-  resetPatternComputed();  
+  resetPatternComputed();
   // search for all block that are generators.
   QList<FunctionalBlock*> generators;
   generators.append(sources);
   // search for all block that are generators.
   QList<FunctionalBlock*> generators;
   generators.append(sources);
@@ -189,7 +189,15 @@ bool Graph::computeOutputPatterns(int nbExec) {
     topGroup->computeOutputPattern();
   }
   catch(Exception e) {
     topGroup->computeOutputPattern();
   }
   catch(Exception e) {
-    cerr << qPrintable(e.getMessage()) << endl;
-    return false;
+    throw(e);
+  }
+}
+
+void Graph::generateVHDL(const QString &path) throw(Exception) {
+  try {
+    topGroup->generateVHDL(path);
+  }
+  catch(Exception e) {
+    throw(e);
   }
 }
   }
 }