Exemplo n.º 1
0
        private bool TryMergeVertex(CondensedVertex v, CondensedVertex destV, ref int numVertex)
        {
            List <KeyValuePair <IVertex, IVertex> > oldEdges = SaveExistingEdges(v);

            this.RemoveVertex(v);
            numVertex--;
            List <IEdge> pendingEdges = MergeOldEdges(v, destV, oldEdges);

            if (numVertex > SCCCount)
            {
                UndoMerge(v, destV, oldEdges, pendingEdges);
                numVertex++;
                Debug.Assert(numVertex == this.VerticesCount);
                Debug.Assert(numVertex == SCCCount);
                return(false);
            }
            else
            {
                foreach (TypeReference tref in v.ContainedTypes)
                {
                    destV.ContainedTypes.Add(tref);
                }
                destV.Condense();
                return(true);
            }
        }
        public void CGVertexHandler(object sender, CondensationGraphVertexEventArgs arg)
        {
            CondensedVertex cgv = arg.CondensationGraphVertex as CondensedVertex;

            cgv.IsSCC = true;
            foreach (TypeVertex tv in arg.StronglyConnectedVertices)
            {
                if (tv.ImutableExternalType)
                {
                    cgv.ImutableExternalType = true;
                }
            }

            cgv.Condense(arg.StronglyConnectedVertices);
        }
 private bool TryMergeVertex(CondensedVertex v, CondensedVertex destV, ref int numVertex)
 {
     List<KeyValuePair<IVertex, IVertex>> oldEdges = SaveExistingEdges(v);
     this.RemoveVertex(v);
     numVertex--;
     List<IEdge> pendingEdges = MergeOldEdges(v, destV, oldEdges);
     if (numVertex > SCCCount)
     {
         UndoMerge(v, destV, oldEdges, pendingEdges);
         numVertex++;
         Debug.Assert(numVertex == this.VerticesCount);
         Debug.Assert(numVertex == SCCCount);
         return false;
     }
     else
     {
         foreach (TypeReference tref in v.ContainedTypes)
         {
             destV.ContainedTypes.Add(tref);
         }
         destV.Condense();
         return true;
     }
 }