コード例 #1
0
 protected override void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold)
 {
     if(rootSignal.BehavesAsBeingDriven(ignoreHold))
     {
         List<Guid> ports = new List<Guid>();
         TraversePort(ports, rootSignal.DrivenByPort, rootSignal, ignoreHold, visitor);
     }
 }
コード例 #2
0
 private bool TraverseSignal(List<Guid> signals, Signal signal, Port target, bool ignoreHold, IScanVisitor visitor)
 {
     if(signal == null || signals.Contains(signal.InstanceId))
         return true;
     signals.Add(signal.InstanceId);
     if(visitor.EnterSignal(signal, target, false, target == null))
     {
         if(signal.BehavesAsBeingDriven(ignoreHold))
         {
             Port port = signal.DrivenByPort;
             foreach(Signal input in port.InputSignals)
                 if(!TraverseSignal(signals, input, port, ignoreHold, visitor))
                     return false; // finished
         }
     }
     return visitor.LeaveSignal(signal, target, false, target == null);
 }
コード例 #3
0
        private bool TraverseSignal(List<Guid> signals, List<Guid> ports, List<Guid> buses, Signal signal, Port target, bool ignoreHold, IScanVisitor visitor)
        {
            if(signal == null || signals.Contains(signal.InstanceId))
                return true;
            signals.Add(signal.InstanceId);

            if(visitor.EnterSignal(signal, target, false, target == null))
            {
                // LEAF SIGNAL?
                if(!signal.BehavesAsBeingDriven(ignoreHold))
                {
                    if(!visitor.VisitLeaf(signal, false))
                        return false; // finished
                }
                else // HANDLE PORT
                {
                    TraversePort(signals, ports, buses, signal.DrivenByPort, signal, ignoreHold, visitor);
                }
            }
            return visitor.LeaveSignal(signal, target, false, target == null);
        }