public void RemoveInEdgeIf(IVertex u, IEdgePredicate pred)
 {
     if (u == null)
     {
         throw new ArgumentNullException("vertex u");
     }
     if (pred == null)
     {
         throw new ArgumentNullException("predicate");
     }
     EdgeCollection edges = this.VertexInEdges.get_Item(u);
     EdgeCollection edges2 = new EdgeCollection();
     EdgeCollection.Enumerator enumerator = edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge edge = enumerator.get_Current();
         if (pred.Test(edge))
         {
             edges2.Add(edge);
         }
     }
     EdgeCollection.Enumerator enumerator2 = edges2.GetEnumerator();
     while (enumerator2.MoveNext())
     {
         IEdge e = enumerator2.get_Current();
         this.RemoveEdge(e);
     }
 }
 public override void RemoveEdge(IVertex u, IVertex v)
 {
     if (u == null)
     {
         throw new ArgumentNullException("source vertex");
     }
     if (v == null)
     {
         throw new ArgumentNullException("targetvertex");
     }
     EdgeCollection edges = base.VertexOutEdges.get_Item(u);
     EdgeCollection edges2 = this.VertexInEdges.get_Item(v);
     EdgeCollection edges3 = new EdgeCollection();
     EdgeCollection.Enumerator enumerator = edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge edge = enumerator.get_Current();
         if (edge.get_Target() == v)
         {
             edges3.Add(edge);
         }
     }
     EdgeCollection.Enumerator enumerator2 = edges2.GetEnumerator();
     while (enumerator2.MoveNext())
     {
         IEdge edge2 = enumerator2.get_Current();
         if (edge2.get_Source() == u)
         {
             edges3.Add(edge2);
         }
     }
     EdgeCollection.Enumerator enumerator3 = edges3.GetEnumerator();
     while (enumerator3.MoveNext())
     {
         IEdge e = enumerator3.get_Current();
         this.RemoveEdge(e);
     }
 }
 public virtual void RemoveEdge(IVertex u, IVertex v)
 {
     if (u == null)
     {
         throw new ArgumentNullException("source vertex");
     }
     if (v == null)
     {
         throw new ArgumentNullException("targetvertex");
     }
     EdgeCollection edges = this.VertexOutEdges.get_Item(u);
     if (edges == null)
     {
         throw new EdgeNotFoundException();
     }
     EdgeCollection edges2 = new EdgeCollection();
     EdgeCollection.Enumerator enumerator = edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge edge = enumerator.get_Current();
         if (edge.get_Target() == v)
         {
             edges2.Add(edge);
         }
     }
     EdgeCollection.Enumerator enumerator2 = edges2.GetEnumerator();
     while (enumerator2.MoveNext())
     {
         IEdge edge2 = enumerator2.get_Current();
         edges.Remove(edge2);
     }
 }
 public virtual void RemoveEdgeIf(IEdgePredicate pred)
 {
     if (pred == null)
     {
         throw new ArgumentNullException("predicate");
     }
     EdgeCollection edges = new EdgeCollection();
     VertexEdgesEnumerator enumerator = this.Edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge edge = enumerator.get_Current();
         if (pred.Test(edge))
         {
             edges.Add(edge);
         }
     }
     EdgeCollection.Enumerator enumerator2 = edges.GetEnumerator();
     while (enumerator2.MoveNext())
     {
         IEdge e = enumerator2.get_Current();
         this.RemoveEdge(e);
     }
 }
 public void AddReversedEdges()
 {
     if (this.Augmented)
     {
         throw new InvalidOperationException("Graph already augmented");
     }
     EdgeCollection edges = new EdgeCollection();
     IEdgeEnumerator enumerator = this.VisitedGraph.get_Edges().GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge edge = enumerator.get_Current();
         if (!this.reversedEdges.Contains(edge))
         {
             IEdge edge2 = this.FindReversedEdge(edge);
             if (edge2 != null)
             {
                 this.reversedEdges.set_Item(edge, edge2);
                 if (!this.reversedEdges.Contains(edge2))
                 {
                     this.reversedEdges.set_Item(edge2, edge);
                 }
             }
             else
             {
                 edges.Add(edge);
             }
         }
     }
     EdgeCollection.Enumerator enumerator2 = edges.GetEnumerator();
     while (enumerator2.MoveNext())
     {
         IEdge edge3 = enumerator2.get_Current();
         if (!this.reversedEdges.Contains(edge3))
         {
             IEdge edge4 = this.FindReversedEdge(edge3);
             if (edge4 != null)
             {
                 this.reversedEdges.set_Item(edge3, edge4);
             }
             else
             {
                 edge4 = this.VisitedGraph.AddEdge(edge3.get_Target(), edge3.get_Source());
                 this.augmentedEgdes.Add(edge4);
                 this.reversedEdges.set_Item(edge3, edge4);
                 this.reversedEdges.set_Item(edge4, edge3);
                 this.OnReservedEdgeAdded(new EdgeEventArgs(edge4));
             }
         }
     }
     this.augmented = true;
 }