private void OnBackEdge(TEdge e) { EdgeEventHandler <TVertex, TEdge> eh = this.BackEdge; if (eh != null) { eh(this, new EdgeEventArgs <TVertex, TEdge>(e)); } }
private void OnForwardOrCrossEdge(TEdge e) { EdgeEventHandler <TVertex, TEdge> eh = this.ForwardOrCrossEdge; if (eh != null) { eh(this, new EdgeEventArgs <TVertex, TEdge>(e)); } }
/// <summary> /// Registers the predecessors handler /// </summary> /// <param name="vis"></param> public void RegisterPredecessorRecorderHandlers(IPredecessorRecorderVisitor vis) { if (vis == null) { throw new ArgumentNullException("visitor"); } TreeEdge += new EdgeEventHandler(vis.TreeEdge); FinishVertex += new VertexEventHandler(vis.FinishVertex); }
protected virtual void OnEdgeRemoved(EdgeEventArgs <TVertex, TEdge> args) { EdgeEventHandler <TVertex, TEdge> eh = this.EdgeRemoved; if (eh != null) { eh(this, args); } }
protected virtual void OnEdgeAdded(EdgeEventArgs <int, TEdge> args) { EdgeEventHandler <int, TEdge> eh = this.EdgeAdded; if (eh != null) { eh(this, args); } }
/// <summary> /// /// </summary> /// <param name="vis"></param> public void RegisterTreeEdgeBuilderHandlers(ITreeEdgeBuilderVisitor vis) { if (vis == null) { throw new ArgumentNullException("visitor"); } TreeEdge += new EdgeEventHandler(vis.TreeEdge); }
/// <summary> /// /// </summary> /// <param name="vis"></param> public void RegisterDistanceRecorderHandlers(IDistanceRecorderVisitor vis) { if (vis == null) { throw new ArgumentNullException("visitor"); } InitializeVertex += new VertexEventHandler(vis.InitializeVertex); DiscoverVertex += new VertexEventHandler(vis.DiscoverVertex); TreeEdge += new EdgeEventHandler(vis.TreeEdge); }
/// <summary> /// /// </summary> /// <param name="vis"></param> public void RegisterTreeEdgeBuilderHandlers(ITreeEdgeBuilderVisitor vis) { if (vis == null) throw new ArgumentNullException("visitor"); TreeEdge += new EdgeEventHandler(vis.TreeEdge); }
/// <summary> /// Registers the predecessors handler /// </summary> /// <param name="vis"></param> public void RegisterPredecessorRecorderHandlers(IPredecessorRecorderVisitor vis) { if (vis == null) throw new ArgumentNullException("visitor"); TreeEdge += new EdgeEventHandler(vis.TreeEdge); FinishVertex += new VertexEventHandler(vis.FinishVertex); }
/// <summary> /// /// </summary> /// <param name="vis"></param> public void RegisterVisitor(IGraphvizVisitor vis) { WriteGraph += new EventHandler(vis.WriteGraph); WriteVertex += new VertexEventHandler(vis.WriteVertex); WriteEdge += new EdgeEventHandler(vis.WriteEdge); }
public TypeDependencyGraph TypeDepAnalysis(List <TypeReference> typesToExamine) { TypeDependencyGraph tdg = new TypeDependencyGraph(); StrongComponentsAlgorithm scgo = new StrongComponentsAlgorithm(this); scgo.Compute(); Dictionary <int, List <IVertex> > sccMap = new Dictionary <int, List <IVertex> >(); foreach (System.Collections.DictionaryEntry de in scgo.Components) { IVertex v = (IVertex)de.Key; int scc_id = (int)de.Value; if (!sccMap.ContainsKey(scc_id)) { sccMap[scc_id] = new List <IVertex>(); } sccMap[scc_id].Add(v); } Stack <List <TypeVertex> > PendingEdges = new Stack <List <TypeVertex> >(); List <TypeVertex> VertexToRemove = new List <TypeVertex>(); VertexEventHandler discV = delegate(Object s, VertexEventArgs e) { PendingEdges.Push(new List <TypeVertex>()); TypeVertex tv = (TypeVertex)e.Vertex; if (scgo.Components.Contains(tv) && sccMap[scgo.Components[tv]].Count > 1) { tv.SCCNum = scgo.Components[tv]; tdg.AddVertex(tv); } else if (typesToExamine.Contains(tv.TypeRef)) { tdg.AddVertex(tv); } else { VertexToRemove.Add(tv); } }; VertexEventHandler finishV = delegate(Object s, VertexEventArgs e) { TypeVertex tv = (TypeVertex)e.Vertex; List <TypeVertex> pes = PendingEdges.Pop(); if (tdg.ContainsVertex(tv)) { foreach (TypeVertex target in pes) { if (tdg.ContainsVertex(target) && !tdg.ContainsEdge(tv, target)) { tdg.AddEdge(tv, target); } } } }; EdgeEventHandler treeedge = delegate(Object o, EdgeEventArgs e) { PendingEdges.Peek().Add((TypeVertex)e.Edge.Target); }; DepthFirstSearchAlgorithm dfs = new DepthFirstSearchAlgorithm(this); dfs.DiscoverVertex += discV; dfs.FinishVertex += finishV; dfs.TreeEdge += treeedge; dfs.Compute(); foreach (TypeVertex v in VertexToRemove) { this.RemoveVertex(v); } return(tdg); }
/// <summary> /// /// </summary> /// <param name="vis"></param> public void RegisterDistanceRecorderHandlers(IDistanceRecorderVisitor vis) { if (vis == null) throw new ArgumentNullException("visitor"); InitializeVertex += new VertexEventHandler(vis.InitializeVertex); DiscoverVertex += new VertexEventHandler(vis.DiscoverVertex); TreeEdge += new EdgeEventHandler(vis.TreeEdge); }