Example #1
0
        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);
            }
        }
Example #2
0
        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]);
                    }
                }
            }
        }