Exemplo n.º 1
0
        private void OnBackEdge(TEdge e)
        {
            EdgeEventHandler <TVertex, TEdge> eh = this.BackEdge;

            if (eh != null)
            {
                eh(this, new EdgeEventArgs <TVertex, TEdge>(e));
            }
        }
Exemplo n.º 2
0
        private void OnForwardOrCrossEdge(TEdge e)
        {
            EdgeEventHandler <TVertex, TEdge> eh = this.ForwardOrCrossEdge;

            if (eh != null)
            {
                eh(this, new EdgeEventArgs <TVertex, TEdge>(e));
            }
        }
Exemplo n.º 3
0
 /// <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);
 }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="vis"></param>
        public void RegisterTreeEdgeBuilderHandlers(ITreeEdgeBuilderVisitor vis)
        {
            if (vis == null)
            {
                throw new ArgumentNullException("visitor");
            }

            TreeEdge += new EdgeEventHandler(vis.TreeEdge);
        }
Exemplo n.º 7
0
        /// <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);
 }
Exemplo n.º 10
0
 /// <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);
 }
Exemplo n.º 11
0
        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);
        }
 /// <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);
 }