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

Private GIT Repository
finished compat. computation
[blast.git] / Graph.cpp
index d3fd276d6dc9e6191a5485863cb4e0aae6f0ac9d..eb66dc4e8ad8b7cc35cb76108b78c06f9b0738c4 100644 (file)
--- a/Graph.cpp
+++ b/Graph.cpp
@@ -141,3 +141,34 @@ void Graph::resetPatternComputed() {
     }
   }
 }
+
+bool Graph::computeOutputPatterns(int nbExec) {
+  
+  createPatterns();
+  resetPatternComputed();  
+  // search for all block that are generators.
+  QList<FunctionalBlock*> generators;
+  generators.append(sources);
+  foreach(AbstractBlock* block, groups) {    
+    GroupBlock* group = AB_TO_GRP(block);    
+    foreach(AbstractBlock* inBlock, group->getBlocks()) {
+      FunctionalBlock* funBlock = AB_TO_FUN(inBlock);
+      if ((inBlock->isFunctionalBlock()) && (inBlock->isGeneratorBlock())) {
+        generators.append(funBlock);
+      }
+    }    
+  }
+  // search for maximum PP length
+  int maxPP = 0;
+  foreach(FunctionalBlock* block, generators) {    
+    if (block->getProductionPatternLength() > maxPP) maxPP = block->getProductionPatternLength();
+  }
+  // compute output for generators
+  int maxExecLen = maxPP*nbExec;
+  foreach(FunctionalBlock* block, generators) {    
+    int d = block->getProductionPatternLength();
+    block->computeOutputPattern((maxExecLen+d-1)/d);
+  }
+  // compute output for top group
+  topGroup->computeOutputPattern();
+}