#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);
}
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;
}
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;
GroupBlock* group = AB_TO_GRP(block->getParent());
// adding to the graph
- FunctionalBlock* newBlock = createFunctionalBlock(group,ref);
+ FunctionalBlock* newBlock = createFunctionalBlock(group,ref, true);
return newBlock;
}
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;
}
ReferenceBlock* ref = block->getReference();
// adding to the graph
- FunctionalBlock* newBlock = createSourceBlock(ref);
+ FunctionalBlock* newBlock = createSourceBlock(ref, true);
return newBlock;
}
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();
}
}
}
throw(e);
}
- resetPatternComputed();
+ resetPatternComputed();
// search for all block that are generators.
QList<FunctionalBlock*> generators;
generators.append(sources);
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;
+}