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

Private GIT Repository
added context to dispatcher op.
[blast.git] / Graph.cpp
index 4b24181bbf023f8a0a318eaaf36b3ac824bab28f..a64d8aa7dd16a1279f670758ce95d3bf6542e7a9 100644 (file)
--- a/Graph.cpp
+++ b/Graph.cpp
@@ -3,8 +3,8 @@
 #include "ReferenceBlock.h"
 #include "FunctionalBlock.h"
 
-Graph::Graph() {
-  topGroup = new GroupBlock(NULL);
+Graph::Graph(bool createTopGroupIface) {
+  topGroup = new GroupBlock(NULL, createTopGroupIface);
   topGroup->setName("top group");
   groups.append(topGroup);
 }
@@ -18,8 +18,8 @@ QList<AbstractInterface *> Graph::getOutsideInterfaces() {
   return topGroup->getInterfaces();
 }
 
-GroupBlock* Graph::createChildGroupBlock(GroupBlock* parent) {
-  GroupBlock* b = new GroupBlock(parent);
+GroupBlock* Graph::createChildGroupBlock(GroupBlock* parent, bool createGroupIface) {
+  GroupBlock* b = new GroupBlock(parent, createGroupIface);
   groups.append(b);
   return b;
 }
@@ -38,10 +38,9 @@ GroupBlock* Graph::getGroupBlockByName(QString name) {
   return NULL;
 }
 
-FunctionalBlock* Graph::createFunctionalBlock(GroupBlock* group, ReferenceBlock* ref) {
+FunctionalBlock* Graph::createFunctionalBlock(GroupBlock* group, ReferenceBlock* ref, bool createIfaces) {
 
-  FunctionalBlock* newBlock = new FunctionalBlock(group,ref);
-  newBlock->populate();
+  FunctionalBlock* newBlock = new FunctionalBlock(group,ref, createIfaces);
   group->addBlock(newBlock);
 
   return newBlock;
@@ -53,7 +52,7 @@ FunctionalBlock* Graph::duplicateFunctionalBlock(FunctionalBlock *block) {
   GroupBlock* group = AB_TO_GRP(block->getParent());
 
   // adding to the graph
-  FunctionalBlock* newBlock = createFunctionalBlock(group,ref);
+  FunctionalBlock* newBlock = createFunctionalBlock(group,ref, true);
   return newBlock;
 }
 
@@ -78,10 +77,9 @@ FunctionalBlock* Graph::getFunctionalBlockByName(QString name, GroupBlock* paren
   return block;
 }
 
-FunctionalBlock* Graph::createSourceBlock(ReferenceBlock* ref) {
+FunctionalBlock* Graph::createSourceBlock(ReferenceBlock* ref, bool createIfaces) {
 
-  FunctionalBlock* newBlock = new FunctionalBlock(NULL,ref);
-  newBlock->populate();
+  FunctionalBlock* newBlock = new FunctionalBlock(NULL,ref, createIfaces);
   sources.append(newBlock);
   return newBlock;
 }
@@ -91,7 +89,7 @@ FunctionalBlock* Graph::duplicateSourceBlock(FunctionalBlock *block) {
   ReferenceBlock* ref = block->getReference();  
 
   // adding to the graph
-  FunctionalBlock* newBlock = createSourceBlock(ref);
+  FunctionalBlock* newBlock = createSourceBlock(ref, true);
   return newBlock;
 }
 
@@ -138,12 +136,15 @@ void Graph::createPatterns() throw(Exception) {
 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();
     }
   }
 }
@@ -157,7 +158,7 @@ void Graph::computeOutputPatterns(int nbExec) throw(Exception) {
     throw(e);    
   }
 
-  resetPatternComputed();  
+  resetPatternComputed();
   // search for all block that are generators.
   QList<FunctionalBlock*> generators;
   generators.append(sources);
@@ -189,3 +190,17 @@ void Graph::computeOutputPatterns(int nbExec) throw(Exception) {
     throw(e);
   }
 }
+
+void Graph::generateVHDL(const QString &path) throw(Exception) {
+  try {
+    topGroup->generateVHDL(path);
+  }
+  catch(Exception e) {
+    throw(e);
+  }
+}
+
+QList<QString> Graph::getExternalResources() {
+  QList<QString> list = topGroup->getExternalResources();
+  return list;
+}