protected override void DoTraverse(IEnumerable<Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
 {
     List<Guid> signals = new List<Guid>();
     foreach(Signal rootSignal in rootSignals)
         if(!TraverseSignal(signals, rootSignal, null, ignoreHold, visitor))
             break; // finished
 }
 protected override void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
 {
     List<Guid> signals = new List<Guid>();
     foreach(Signal input in rootPort.InputSignals)
         if(!TraverseSignal(signals, input, rootPort, ignoreHold, visitor))
             break; // finished
 }
示例#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)
                return true;

            bool again = true;
            if(!signals.Contains(signal.InstanceId))
            {
                again = false;
                signals.Add(signal.InstanceId);
            }

            if(visitor.EnterSignal(signal, target, again, target == null))
            {
                // LEAF SIGNAL?
                if(!signal.BehavesAsBeingDriven(ignoreHold))
                {
                    if(!visitor.VisitLeaf(signal, again))
                        return false; // finished
                }
                else // HANDLE PORT
                {
                    TraversePort(signals, ports, buses, signal.DrivenByPort, signal, ignoreHold, visitor);
                }
            }
            return visitor.LeaveSignal(signal, target, again, target == null);
        }
 protected override void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
 {
     List<Guid> signals = new List<Guid>();
     List<Guid> ports = new List<Guid>();
     List<Guid> buses = new List<Guid>();
     TraversePort(signals, ports, buses, rootPort, null, ignoreHold, visitor);
 }
示例#5
0
 public void Traverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
 {
     if (visitor == null)
     {
         throw new ArgumentNullException("visitor");
     }
     visitor.DefaultStrategy.Traverse(rootPort, visitor, ignoreHold);
 }
 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);
     }
 }
示例#7
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);
     }
 }
示例#8
0
 public void Traverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
 {
     if (visitor == null)
     {
         throw new ArgumentNullException("visitor");
     }
     visitor.DefaultStrategy.Traverse(rootSignals, visitor, ignoreHold);
 }
示例#9
0
 public static void Traverse(Port rootPort, ScanStrategy strategy, IScanVisitor visitor, bool ignoreHold)
 {
     if (strategy == null)
     {
         throw new ArgumentNullException("strategy");
     }
     strategy.Traverse(rootPort, visitor, ignoreHold);
 }
示例#10
0
 public void Traverse(IEnumerable<Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
 {
     //lock(??) {
     ScanStrategy strat = ProvideExecutableInstance();
     strat._activeScans++; //}
     try { strat.DoTraverse(rootSignals, visitor, ignoreHold); }
     finally { strat._activeScans--; }
 }
示例#11
0
 protected override void DoTraverse(IEnumerable<Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
 {
     List<Guid> ports = new List<Guid>();
     foreach(Signal rootSignal in rootSignals)
         if(rootSignal.BehavesAsBeingDriven(ignoreHold))
             if(!TraversePort(ports, rootSignal.DrivenByPort, rootSignal, ignoreHold, visitor))
                 break; // finished
 }
示例#12
0
        protected override void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
        {
            List <Guid> signals = new List <Guid>();
            List <Guid> ports   = new List <Guid>();
            List <Guid> buses   = new List <Guid>();

            TraversePort(signals, ports, buses, rootPort, null, ignoreHold, visitor);
        }
示例#13
0
        public void Traverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
        {
            //lock(??) {
            ScanStrategy strat = ProvideExecutableInstance();

            strat._activeScans++; //}
            try { strat.DoTraverse(rootSignals, visitor, ignoreHold); }
            finally { strat._activeScans--; }
        }
 protected override void DoTraverse(IEnumerable<Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
 {
     Stack<Guid> signals = new Stack<Guid>();
     foreach(Signal rootSignal in rootSignals)
     {
         signals.Clear();
         if(!TraverseSignal(signals, rootSignal, null, ignoreHold, visitor))
             break;
     }
 }
示例#15
0
 public void Traverse(Signal rootSignal, IScanStrategy strategy, IScanVisitor visitor, bool ignoreHold)
 {
     if (visitor == null)
     {
         throw new ArgumentNullException("visitor");
     }
     if (strategy == null)
     {
         throw new ArgumentNullException("strategy");
     }
     strategy.Traverse(rootSignal, visitor, ignoreHold);
 }
示例#16
0
        protected override void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
        {
            List <Guid> signals = new List <Guid>();

            foreach (Signal input in rootPort.InputSignals)
            {
                if (!TraverseSignal(signals, input, rootPort, ignoreHold, visitor))
                {
                    break; // finished
                }
            }
        }
示例#17
0
        protected override void DoTraverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
        {
            List <Guid> signals = new List <Guid>();

            foreach (Signal rootSignal in rootSignals)
            {
                if (!TraverseSignal(signals, rootSignal, null, ignoreHold, visitor))
                {
                    break; // finished
                }
            }
        }
        protected override void DoTraverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
        {
            Stack <Guid> signals = new Stack <Guid>();

            foreach (Signal rootSignal in rootSignals)
            {
                signals.Clear();
                if (!TraverseSignal(signals, rootSignal, null, ignoreHold, visitor))
                {
                    break;
                }
            }
        }
示例#19
0
 private bool TraversePort(List<Guid> ports, Port port, Signal target, bool ignoreHold, IScanVisitor visitor)
 {
     if(ports.Contains(port.InstanceId))
         return true;
     ports.Add(port.InstanceId);
     if(visitor.EnterPort(port, target, false, target == null))
     {
         foreach(Signal input in port.InputSignals)
             if(input != null && input.BehavesAsBeingDriven(ignoreHold))
                 if(!TraversePort(ports, input.DrivenByPort, input, ignoreHold, visitor))
                     return false; // finished
     }
     return visitor.LeavePort(port, target, false, target == null);
 }
示例#20
0
        protected override void DoTraverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold)
        {
            List <Guid> ports = new List <Guid>();

            foreach (Signal rootSignal in rootSignals)
            {
                if (rootSignal.BehavesAsBeingDriven(ignoreHold))
                {
                    if (!TraversePort(ports, rootSignal.DrivenByPort, rootSignal, ignoreHold, visitor))
                    {
                        break; // finished
                    }
                }
            }
        }
 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);
 }
        private bool TraverseSignal(Stack <Guid> signals, Signal signal, Port target, bool ignoreHold, IScanVisitor visitor)
        {
            if (signal == null)
            {
                return(true);
            }

            if (visitor.EnterSignal(signal, target, false, target == null))
            {
                signals.Push(signal.InstanceId);

                // HANDLE PORT
                if (signal.BehavesAsBeingDriven(ignoreHold))
                {
                    Port port = signal.DrivenByPort;

                    if (visitor.EnterPort(port, signal, false, false))
                    {
                        // LEAF PORT?
                        if (port.InputSignalCount == 0 && port.BusCount == 0)
                        {
                            if (!visitor.VisitLeaf(port, false))
                            {
                                return(false); // finished
                            }
                        }
                        // HANDLE BUSES
                        foreach (Bus b in port.Buses)
                        {
                            if (!visitor.VisitLeaf(b, false))
                            {
                                return(false); // finished
                            }
                        }
                        // HANDLE INPUT SIGNALS
                        foreach (Signal s in port.InputSignals)
                        {
                            if (signals.Contains(s.InstanceId))
                            {
                                if (!visitor.VisitCycle(port, signal, s))
                                {
                                    return(false); //finished
                                }
                            }
                            else if (!TraverseSignal(signals, s, port, ignoreHold, visitor))
                            {
                                return(false); // finished
                            }
                        }
                    }
                    if (!visitor.LeavePort(port, signal, false, false))
                    {
                        return(false); // finished
                    }
                }
                else if (!visitor.VisitLeaf(signal, false))
                {
                    return(false); // finished
                }
                signals.Pop();
            }
            return(visitor.LeaveSignal(signal, target, false, target == null));
        }
示例#23
0
        public void ForEachPort(IEnumerable <Signal> rootSignals, Predicate <Port> match, ActionContinue <Port> action, bool ignoreHold)
        {
            IScanVisitor visitor = Binder.GetInstance <IScanVisitor, ActionContinue <Port>, Predicate <Port> >(action, match);

            visitor.DefaultStrategy.Traverse(rootSignals, visitor, ignoreHold);
        }
示例#24
0
 private bool TraversePort(List <Guid> ports, Port port, Signal target, bool ignoreHold, IScanVisitor visitor)
 {
     if (ports.Contains(port.InstanceId))
     {
         return(true);
     }
     ports.Add(port.InstanceId);
     if (visitor.EnterPort(port, target, false, target == null))
     {
         foreach (Signal input in port.InputSignals)
         {
             if (input != null && input.BehavesAsBeingDriven(ignoreHold))
             {
                 if (!TraversePort(ports, input.DrivenByPort, input, ignoreHold, visitor))
                 {
                     return(false); // finished
                 }
             }
         }
     }
     return(visitor.LeavePort(port, target, false, target == null));
 }
示例#25
0
 public static void Traverse(Signal rootSignal, ScanStrategy strategy, IScanVisitor visitor, bool ignoreHold)
 {
     if(strategy == null) throw new ArgumentNullException("strategy");
     strategy.Traverse(rootSignal, visitor, ignoreHold);
 }
示例#26
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));
 }
示例#27
0
 protected abstract void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold);
示例#28
0
 protected abstract void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold);
示例#29
0
        public void ForEachSignal(IEnumerable <Signal> rootSignals, ActionContinue <Signal> action, bool ignoreHold)
        {
            IScanVisitor visitor = Binder.GetInstance <IScanVisitor, ActionContinue <Signal> >(action);

            visitor.DefaultStrategy.Traverse(rootSignals, visitor, ignoreHold);
        }
 private void TraverseRootPort(Stack<Guid> signals, Port rootPort, bool ignoreHold, IScanVisitor visitor)
 {
     if(visitor.EnterPort(rootPort, null, false, true))
     {
         foreach(Bus b in rootPort.Buses)
             if(!visitor.VisitLeaf(b, false))
                 return; // finished
         foreach(Signal s in rootPort.InputSignals)
             if(!TraverseSignal(signals, s, rootPort, ignoreHold, visitor))
                 return; // finished
     }
     visitor.LeavePort(rootPort, null, false, true);
 }
示例#31
0
 public void Traverse(IEnumerable<Signal> rootSignals, IScanStrategy strategy, IScanVisitor visitor, bool ignoreHold)
 {
     if(visitor == null) throw new ArgumentNullException("visitor");
     if(strategy == null) throw new ArgumentNullException("strategy");
     strategy.Traverse(rootSignals, visitor, ignoreHold);
 }
示例#32
0
        public void ForEachPort(Port rootPort, ActionContinue <Port> action, bool ignoreHold)
        {
            IScanVisitor visitor = Binder.GetInstance <IScanVisitor, ActionContinue <Port> >(action);

            visitor.DefaultStrategy.Traverse(rootPort, visitor, ignoreHold);
        }
示例#33
0
 public void Traverse(Port rootPort, IScanStrategy strategy, IScanVisitor visitor, bool ignoreHold)
 {
     if(visitor == null) throw new ArgumentNullException("visitor");
     if(strategy == null) throw new ArgumentNullException("strategy");
     strategy.Traverse(rootPort, visitor, ignoreHold);
 }
示例#34
0
        public void ForEachSignal(Port rootPort, Predicate <Signal> match, ActionContinue <Signal> action, bool ignoreHold)
        {
            IScanVisitor visitor = Binder.GetInstance <IScanVisitor, ActionContinue <Signal>, Predicate <Signal> >(action, match);

            visitor.DefaultStrategy.Traverse(rootPort, visitor, ignoreHold);
        }
示例#35
0
 protected abstract void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold);
        protected override void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold)
        {
            Stack <Guid> signals = new Stack <Guid>();

            TraverseSignal(signals, rootSignal, null, ignoreHold, visitor);
        }
示例#37
0
        private bool TraversePort(List <Guid> signals, List <Guid> ports, List <Guid> buses, Port port, Signal target, bool ignoreHold, IScanVisitor visitor)
        {
            if (ports.Contains(port.InstanceId))
            {
                return(true);
            }
            ports.Add(port.InstanceId);

            if (visitor.EnterPort(port, target, false, target == null))
            {
                // LEAF PORT?
                if (port.InputSignalCount == 0 && port.BusCount == 0)
                {
                    if (!visitor.VisitLeaf(port, false))
                    {
                        return(false); // finished
                    }
                }
                // HANDLE BUSES
                foreach (Bus b in port.Buses)
                {
                    if (buses.Contains(b.InstanceId))
                    {
                        continue;
                    }

                    buses.Add(b.InstanceId);
                    if (!visitor.VisitLeaf(b, false))
                    {
                        return(false); // finished
                    }
                }

                // HANDLE INPUT SIGNALS
                foreach (Signal s in port.InputSignals)
                {
                    if (!TraverseSignal(signals, ports, buses, s, port, ignoreHold, visitor))
                    {
                        return(false); // finished
                    }
                }
            }
            return(visitor.LeavePort(port, target, false, target == null));
        }
        protected override void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
        {
            Stack <Guid> signals = new Stack <Guid>();

            TraverseRootPort(signals, rootPort, ignoreHold, visitor);
        }
 protected override void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold)
 {
     Stack<Guid> signals = new Stack<Guid>();
     TraverseRootPort(signals, rootPort, ignoreHold, visitor);
 }
 private void TraverseRootPort(Stack <Guid> signals, Port rootPort, bool ignoreHold, IScanVisitor visitor)
 {
     if (visitor.EnterPort(rootPort, null, false, true))
     {
         foreach (Bus b in rootPort.Buses)
         {
             if (!visitor.VisitLeaf(b, false))
             {
                 return; // finished
             }
         }
         foreach (Signal s in rootPort.InputSignals)
         {
             if (!TraverseSignal(signals, s, rootPort, ignoreHold, visitor))
             {
                 return; // finished
             }
         }
     }
     visitor.LeavePort(rootPort, null, false, true);
 }
示例#41
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));
        }
        private bool TraversePort(List<Guid> signals, List<Guid> ports, List<Guid> buses, Port port, Signal target, bool ignoreHold, IScanVisitor visitor)
        {
            if(ports.Contains(port.InstanceId))
                return true;
            ports.Add(port.InstanceId);

            if(visitor.EnterPort(port, target, false, target == null))
            {
                // LEAF PORT?
                if(port.InputSignalCount == 0 && port.BusCount == 0)
                    if(!visitor.VisitLeaf(port, false))
                        return false; // finished

                // HANDLE BUSES
                foreach(Bus b in port.Buses)
                {
                    if(buses.Contains(b.InstanceId))
                        continue;

                    buses.Add(b.InstanceId);
                    if(!visitor.VisitLeaf(b, false))
                        return false; // finished
                }

                // HANDLE INPUT SIGNALS
                foreach(Signal s in port.InputSignals)
                    if(!TraverseSignal(signals, ports, buses, s, port, ignoreHold, visitor))
                        return false; // finished
            }
            return visitor.LeavePort(port, target, false, target == null);
        }
        private bool TraverseSignal(Stack<Guid> signals, Signal signal, Port target, bool ignoreHold, IScanVisitor visitor)
        {
            if(signal == null)
                return true;

            if(visitor.EnterSignal(signal, target, false, target == null))
            {
                signals.Push(signal.InstanceId);

                // HANDLE PORT
                if(signal.BehavesAsBeingDriven(ignoreHold))
                {
                    Port port = signal.DrivenByPort;

                    if(visitor.EnterPort(port, signal, false, false))
                    {
                        // LEAF PORT?
                        if(port.InputSignalCount == 0 && port.BusCount == 0)
                            if(!visitor.VisitLeaf(port, false))
                                return false; // finished

                        // HANDLE BUSES
                        foreach(Bus b in port.Buses)
                            if(!visitor.VisitLeaf(b, false))
                                return false; // finished

                        // HANDLE INPUT SIGNALS
                        foreach(Signal s in port.InputSignals)
                        {
                            if(signals.Contains(s.InstanceId))
                            {
                                if(!visitor.VisitCycle(port, signal, s))
                                    return false; //finished
                            }
                            else if(!TraverseSignal(signals, s, port, ignoreHold, visitor))
                                return false; // finished
                        }
                    }
                    if(!visitor.LeavePort(port, signal, false, false))
                        return false; // finished
                }
                else if(!visitor.VisitLeaf(signal, false))
                    return false; // finished

                signals.Pop();
            }
            return visitor.LeaveSignal(signal, target, false, target == null);
        }
示例#44
0
 public static void Traverse(IEnumerable <Signal> rootSignals, ScanStrategy strategy, IScanVisitor visitor, bool ignoreHold)
 {
     if (strategy == null)
     {
         throw new ArgumentNullException("strategy");
     }
     strategy.Traverse(rootSignals, visitor, ignoreHold);
 }
示例#45
0
 protected abstract void DoTraverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold);
示例#46
0
 protected abstract void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold);
 protected override void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold)
 {
     List<Guid> signals = new List<Guid>();
     TraverseSignal(signals, rootSignal, null, ignoreHold, visitor);
 }
示例#48
0
 protected abstract void DoTraverse(IEnumerable<Signal> rootSignals, IScanVisitor visitor, bool ignoreHold);
示例#49
0
 public void Traverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold)
 {
     if(visitor == null) throw new ArgumentNullException("visitor");
     visitor.DefaultStrategy.Traverse(rootSignal, visitor, ignoreHold);
 }