private void ConnectPorts(Port srcPort_obj, Port dstPort_obj) { if (srcPort_obj.Impl.Equals(dstPort_obj.Impl)) { return; } Connection conn_obj = new Connection(srcPort_obj, dstPort_obj); srcPort_obj.DstConnections.Add(conn_obj); dstPort_obj.SrcConnections.Add(conn_obj); Logger.WriteDebug("Connecting Port {0} to {1}", srcPort_obj.Impl.Name, dstPort_obj.Impl.Name); // mark the dstPort visited if (!VisitedPorts.ContainsKey(dstPort_obj.Impl.ID)) { VisitedPorts.Add(dstPort_obj.Impl.ID, dstPort_obj); dstPort_obj.connectedPorts = srcPort_obj.connectedPorts; } else { Logger.WriteDebug("Port {0} already in visited ports, don't add", dstPort_obj.Impl.Path); } }
public override void visit(Port obj) { Logger.WriteDebug("CyPhyConnectVisitor::visit({0})", obj.Impl.Path); if (VisitedPorts.ContainsKey(obj.Impl.ID)) // this port was already visited in a connection traversal - no need to explore its connections again { return; } VisitedPorts.Add(obj.Impl.ID, obj); Logger.WriteDebug("Connect Visit: port {0}", obj.Impl.Path); var elecPort = obj.Impl as Tonka.SchematicModelPort; if (elecPort != null) { // from schematic port navigate out to component port (or connector) in either connection direction var compPorts = elecPort.DstConnections.PortCompositionCollection.Select(p => p.DstEnd). Union(elecPort.SrcConnections.PortCompositionCollection.Select(p => p.SrcEnd)); foreach (var compPort in compPorts) { Dictionary <string, object> visited = new Dictionary <string, object>(); if (compPort.ParentContainer is Tonka.Connector) // traverse connector chain, carry port name in srcConnector { obj.connectedPorts[compPort.Impl.AbsPath] = compPort; Traverse(compPort.Name, obj, obj.ComponentParent.Impl, compPort.ParentContainer as Tonka.Connector, visited); } else if (compPort.ParentContainer is Tonka.DesignElement) { obj.connectedPorts[compPort.Impl.AbsPath] = compPort; Traverse(obj, (Tonka.DesignElement)obj.Parent.Impl, compPort as Tonka.Port, visited); // traverse port chain } else if (portHasCorrectParentType(compPort) && CyPhyBuildVisitor.Ports.ContainsKey(compPort.ID)) { obj.connectedPorts[compPort.Impl.AbsPath] = compPort; ConnectPorts(obj, CyPhyBuildVisitor.Ports[compPort.ID]); } } } }