X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/cf93fd850a8b6e9a6f40faed9f796a0e2fb0cedb..1b7818e18ed7bcf3464e307b97c6e0e6d72cc69b:/Graph.cpp diff --git a/Graph.cpp b/Graph.cpp index 4b24181..a64d8aa 100644 --- 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 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 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 Graph::getExternalResources() { + QList list = topGroup->getExternalResources(); + return list; +}