width = reference->getWidth();\r
direction = reference->getDirection();\r
purpose = reference->getPurpose(); \r
- connectedFrom = NULL;\r
+ connectedFrom = NULL; \r
}\r
\r
bool FunctionalInterface::isFunctionalInterface() {\r
2 - iface is owned by the parent group of the block that owns this\r
2.1 - this is an output, iface is an output of the group\r
2.2 - both are inout\r
+ 3 - this is owned by a source block and iface is owned by the top group\r
\r
*/\r
if (direction == Input) return false;\r
if (iface->isReferenceInterface()) return false;\r
if (iface->getConnectedFrom() != NULL) return false;\r
-\r
+ // first case: interface of blocks within the same group\r
if (getOwner()->getParent() == iface->getOwner()->getParent()) {\r
\r
if ((direction == Output) && (iface->getDirection() == Input)) return true;\r
if ((direction == InOut) && (iface->getDirection() == InOut)) return true;\r
}\r
+ // second case: iface = interface of the group that contains owner of this\r
else if (getOwner()->getParent() == iface->getOwner()) {\r
if ((direction == Output) && (iface->getDirection() == Output)) return true;\r
if ((direction == InOut) && (iface->getDirection() == InOut)) return true;\r
}\r
+ else if ((getOwner()->isSourceBlock()) && (iface->getOwner()->isTopGroupBlock())) {\r
+ if ((direction == Output) && (iface->getDirection() == Input)) return true;\r
+ }\r
\r
return false;\r
\r