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; } }