Graph::Graph() {
topGroup = new GroupBlock(NULL);
topGroup->setName("top group");
+ groups.append(topGroup);
}
Graph::~Graph() {
+
delete topGroup;
}
return topGroup->getInterfaces();
}
-GroupBlock* Graph::createChildBlock(GroupBlock* parent) {
+GroupBlock* Graph::createChildGroupBlock(GroupBlock* parent) {
GroupBlock* b = new GroupBlock(parent);
+ groups.append(b);
return b;
}
-FunctionalBlock* Graph::addFunctionalBlock(GroupBlock* group, ReferenceBlock* ref) {
+bool Graph::removeGroupBlock(GroupBlock *group) {
+ group->removeAllBlocks();
+ GroupBlock* parent = AB_TO_GRP(group->getParent());
+ parent->removeBlock(group);
+ groups.removeAll(group);
+}
+
+GroupBlock* Graph::getGroupBlockByName(QString name) {
+ foreach(GroupBlock* group, groups) {
+ if (group->getName() == name) return group;
+ }
+ return NULL;
+}
+
+FunctionalBlock* Graph::createFunctionalBlock(GroupBlock* group, ReferenceBlock* ref) {
FunctionalBlock* newBlock = new FunctionalBlock(group,ref);
newBlock->populate();
return newBlock;
}
-bool Graph::removeFunctionalBlock(FunctionalBlock* block, GroupBlock *group) {
+FunctionalBlock* Graph::duplicateFunctionalBlock(FunctionalBlock *block) {
+
+ ReferenceBlock* ref = block->getReference();
+ GroupBlock* group = AB_TO_GRP(block->getParent());
+
+ // adding to the graph
+ FunctionalBlock* newBlock = createFunctionalBlock(group,ref);
+ return newBlock;
+}
+
+
+bool Graph::removeFunctionalBlock(FunctionalBlock* block) {
+ GroupBlock* group = AB_TO_GRP(block->getParent());
group->removeBlock(block);
+ return true;
}
-bool Graph::removeGroupBlock(GroupBlock *group) {
- group->removeAllBlocks();
- GroupBlock* parent = AB_TO_GRP(group->getParent());
- parent->removeBlock(group);
+FunctionalBlock* Graph::getFunctionalBlockByName(QString name, GroupBlock* parent) {
+ FunctionalBlock* block = NULL;
+ if (parent != NULL) {
+ block = AB_TO_FUN(parent->getFunctionalBlockByName(name));
+ }
+ else {
+ foreach(GroupBlock* group, groups) {
+ block = AB_TO_FUN(group->getFunctionalBlockByName(name));
+ if (block != NULL) return block;
+ }
+ }
+ return block;
+}
+
+FunctionalBlock* Graph::createSourceBlock(ReferenceBlock* ref) {
+
+ FunctionalBlock* newBlock = new FunctionalBlock(NULL,ref);
+ newBlock->populate();
+ sources.append(newBlock);
+ return newBlock;
+}
+
+FunctionalBlock* Graph::duplicateSourceBlock(FunctionalBlock *block) {
+
+ ReferenceBlock* ref = block->getReference();
+ GroupBlock* group = AB_TO_GRP(block->getParent());
+
+ // adding to the graph
+ FunctionalBlock* newBlock = createSourceBlock(ref);
+ return newBlock;
+}
+
+FunctionalBlock* Graph::getSourceBlockByName(QString name) {
+ foreach(FunctionalBlock* block, sources) {
+ if (block->getName() == name) return block;
+ }
+ return NULL;
+}
+
+bool Graph::removeSourceBlock(FunctionalBlock *block) {
+ sources.removeAll(block);
+ return true;
+}
+
+bool Graph::createPatterns() {
+ bool ok = true;
+ foreach(AbstractBlock* block, sources) {
+ FunctionalBlock* funBlock = AB_TO_FUN(block);
+ ok = funBlock->createPatterns();
+ if (!ok) return false;
+ }
+
+ foreach(AbstractBlock* block, groups) {
+ GroupBlock* group = AB_TO_GRP(block);
+ foreach(AbstractBlock* inBlock, group->getBlocks()) {
+ if (inBlock->isFunctionalBlock()) {
+ FunctionalBlock* funBlock = AB_TO_FUN(inBlock);
+ ok = funBlock->createPatterns();
+ if (!ok) return false;
+ }
+ }
+ }
+ return true;
+}
+
+void Graph::resetPatternComputed() {
+ foreach(AbstractBlock* block, sources) {
+ block->setPatternComputed(false);
+ }
+ foreach(AbstractBlock* block, groups) {
+ GroupBlock* group = AB_TO_GRP(block);
+ group->setPatternComputed(false);
+ foreach(AbstractBlock* inBlock, group->getBlocks()) {
+ inBlock->setPatternComputed(false);
+ }
+ }
}