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 }
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); }
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); } }
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); } }
public void Traverse(IEnumerable <Signal> rootSignals, IScanVisitor visitor, bool ignoreHold) { if (visitor == null) { throw new ArgumentNullException("visitor"); } visitor.DefaultStrategy.Traverse(rootSignals, visitor, ignoreHold); }
public static void Traverse(Port rootPort, ScanStrategy strategy, IScanVisitor visitor, bool ignoreHold) { if (strategy == null) { throw new ArgumentNullException("strategy"); } strategy.Traverse(rootPort, visitor, ignoreHold); }
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) { 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 }
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); }
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; } }
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); }
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 } } }
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; } } }
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); }
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)); }
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); }
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)); }
public static void Traverse(Signal rootSignal, ScanStrategy strategy, IScanVisitor visitor, bool ignoreHold) { if(strategy == null) throw new ArgumentNullException("strategy"); strategy.Traverse(rootSignal, visitor, ignoreHold); }
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)); }
protected abstract void DoTraverse(Port rootPort, IScanVisitor visitor, bool ignoreHold);
protected abstract void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold);
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); }
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); }
public void ForEachPort(Port rootPort, ActionContinue <Port> action, bool ignoreHold) { IScanVisitor visitor = Binder.GetInstance <IScanVisitor, ActionContinue <Port> >(action); visitor.DefaultStrategy.Traverse(rootPort, visitor, ignoreHold); }
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); }
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); }
protected override void DoTraverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold) { Stack <Guid> signals = new Stack <Guid>(); TraverseSignal(signals, rootSignal, null, ignoreHold, visitor); }
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); }
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); }
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); }
protected abstract void DoTraverse(IEnumerable <Signal> rootSignals, 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); }
protected abstract void DoTraverse(IEnumerable<Signal> rootSignals, IScanVisitor visitor, bool ignoreHold);
public void Traverse(Signal rootSignal, IScanVisitor visitor, bool ignoreHold) { if(visitor == null) throw new ArgumentNullException("visitor"); visitor.DefaultStrategy.Traverse(rootSignal, visitor, ignoreHold); }